예제로 확인해보자! )

전자제품은 부모 클래스, 전자레인지는 자식 클래스이다. 전자레인지는 전자제품 클래스로부터 상속을 받았으므로 전원 기능이 함수로 명시 되지 않아도 사용할 수 있다.
여러 종류의 객체를 하나의 이름으로 부를 수 있는 것을 일반화하고 한다.
⭐ 즉, 상속 = 일반화(전자제품) + 확장(해동하다)
상자 하나하나는 모두 객체이자 클래스이다. 이러한 계층을 표현하기 위해 만들어진 개념이 상속이다. 또한 하위 객체는 상위 객체(부모)의 특징을 물려받는다.
상속은 결합도가 매우 높은 편이기에 반드시 써야 할때만 상속을 사용하는 것이 좋음. 객체는 응집도가 높고 결합도가 낮은 것이 좋기 때문이다.
| _[접근 제한자] [abstract | final] class 클래스명 extends 부모 클래스명_ |
java.lang.Object를 상속 받는다. 따라서 모든 클래스는 Object의 자손이다.예)
Car**(참조 타입)** car = new Bus**(인스턴스 타입)**();
Car car = new Bus(); //Car 클래스 속 메소드만 사용할 수 있다.
Bus car = new Bus(); //Bus 클래스에 있는 메소드를 모두 사용할 수 있다.
비유로 접근하기!) 버스를 손으로 가리키면서 “자동차다”라고 말할 수 있다. 버스는 자동차의 한 종류이기 때문이다.
public static final이어야 하며, 모든 메소드는 public abstract이어야 한다. (java 7까지는) final, abstract를 생략하면 자동으로 붙는다.java 8 부터는 디폴트(default) 메소드와 정적(static) 메소드도 선언이 가능하다.
public abstract class Car2 {
public abstract void run(); //run()메소드를 자식 클래스마다 다르게 하고 싶을 때
}
예제) 상속 vs. 인터페이스
public class Parents {
protected boolean hairLoss = true;
public void display(){
System.out.println("IM PARENT");
}
}
👆 상속 클래스 선언
public interface Programer {
void programming();
}
public interface Driver {
void drive();
}
👆 인터페이스 선언
public class David extends Parents implements Programer, Driver{
//Parents는 상속, Programmer/Driver는 인터페이스
public David(){ //David는 한번에 하나의 상속 클래스를 상속 받을 수 있다.
if(this.hairLoss == true){
System.out.println("I am hairloss..");
}
}
@Override
public void programming() { //David는 한번에 여러 인터페이스를 받을 수 있다.
System.out.println("I can programming");
}
@Override
public void drive() {
System.out.println("I can drive");
}
}
👆 부모 클래스로부터 상속받고 & 인터페이스도 구현한 클래스