
하위클래스가 상위클래스를 재활용 가능하다.
하위클래스가 상위클래스를 접근하여 사용 가능하다.
※ super() : 상위클래스의 생성자를 호출

- 클래스를 수직적 구조로 계층화 하여 설계하는 방법
→ 상속- 자바의 상속에서 사용하는 키워드를 쓰세요.
→ extends- 상속 관계에 있는 클래스에서 객체생성 할 때 상위클래스의 생성자를 호출하는 메서드
→ super();- 상속관계에서 하위클래스가 상위클래스를 접근하기 위한 접근제한자
→ protected- 클래스를 수직적 구조로(상속) 설계하면 장점이 무엇인지 쓰시오.
→ 유지보수의 용이성, 코드 중복 최소화, 확장성이 좋다.
상위클래스가 동일한 메세지로 하위클래스를 서로 다르게 동작 시키는 객체지향 이론
상속관계에서 하위클래스가 상위클래스의 동작을 재정의 하는 행위(기능 추가, 변경)
실행시점에서 사용될 메서드가 결정되는 바이딩

Animal ani = new Dog();
ani.eat(); // 실행시점에서 사용될(호출될)메서드가 결정되는 바인딩(동적바인딩)
ani = new Cat();
ani.eat(); // 업캐스팅
((Cat)ani).night(); // 다운캐스팅
Override(재정의) : 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의 하는 것, 실행시점 에서 사용될(호출될)메서드가 결정되는 바인딩(동적바인딩)
Overloading(오버로딩) : 같은 이름의 메서드나 생성자를 여러 개 정의하는 것, 컴파일 시점 에서 사용될 메서드가 결정되는 바인딩(정적바인딩)
- 상속관계에 있는 클래스를 객체 생성할 때 하위클래스에서 상위클래스의 갤체를 생성할 때 사용하는 메서드
→ super()- 부모클래스의 타입으로 하위클래스의 객체를 생성하는 방법
→ 업캐스팅(Upcasting)- 상속관계에서 객체가 생성될 때 맨 위 부모클래스 부터 객체가 생성되어 자식까지 연결되는 구조
→ 상속 체이닝- 실행시점에서 사용될 메서드가 결정되는 바인딩을 무엇이라고 하는가?
→ 동적바인딩- 상속관계에서 하위클래스가 상위클래스의 동작을 변경하거나 추가하는 것을 무엇이라고 하는가?
→ 재정의(Override)
하나의 타입으로 여러가지 타입을 받을 수 있다.(부모이기 때문)
public static void display(Animal ani) {
ani.eat(); // 결과: 먹다.
if (ani instanceof Cat) { // Cat이 ani의 인스턴스인지를 확인
((Cat)ani).night();
}
}
하나의 배열에 서로 다른 타입을 저장 가능하다. (부모타입의 배열 자식타입 저장 가능)

Animal[] ani = {new Dog(), new Cat()};
Animal[] ani = new Animal[2];
- 업매스팅으로 객체를 생성한 후 상위클래스의 타입을 하위클래스의 타입으로 바꾸는 형변환
→ 다운캐스팅(Downcasting)- 상위클래스가 동일한 메세지로 하위클래스를 서로 다르게 동작시키는 객체지향 이론
→ 다형성- 다형성의 전제조건 4가지
→ 상속, 재정의, 업캐스팅, 동적바인딩- 특정 타입이 어떤 타입으로부터 생성이 되었는지 타입을 알아보는 연산자
→ instanceof- 상속관계에서 하위클래스들을 배열에 저장하기 위해서는 어떤 배열을 생성하면 가능한가?
→ 다형성배열, 상위타입배열