다형성을 위함자식은 부모의 클래스이다.라는 말을 만족하도록 부모-자식 관계를 구성
"자식은 부모이다"가 말이 되면 된다.ex)
Animal is a Tiger => doesn't make sense
Tiger is a(n) Animal => make sense!
자식: Tiger, 부모: Animal
정의: 참조변수가 여러 타입의 객체를 참조할 수 있게끔 적용할 수 있는 문법적 요소
특징
예시:
class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks"); } } @Override void run() { System.out.println("Dog runs"); } } public class Application { public static void main(String[] args) { Animal myAnimal = new Dog(); // 업캐스팅: Animal 타입의 참조 변수가 Dog 객체를 참조 - 묵시적 형변환 myAnimal.sound(); // 출력: Dog barks if (myAnimal instanceof Dog) { // 정적 바인딩으로 compile error가 발생하지 않는 것에 대한 예외처리 Dog myDog = (Dog) myAnimal; // 다운캐스팅 - 명시적 형변환 myDog.run(); // 출력: Dog runs } } }
정적 바인딩: compile 시점에서 참조 변수의 메서드를 결정
동적 바인딩: runtime 시점에서 참조 변수의 메서드를 결정
ABSTRACT CLASS: 상속에서의 부모 역할만 하기 위한 클래스
ABSTRACT METHOD: body부가 없는 메서드로, 이후 해당 클래스를 상속받는 자식 클래스에서 해당 메서드를 재정의하도록 유도(규약)한 것.
주의할 점: