다형성 : 자식 객체를 부모 클래스 하나로 다룰 수 있는 기술
다형성 특징
1) 상속이 전제되어 있어야한다.
2) 메소드를 여러개 만들 필요가 없다는 장점
원래는
Animal a = new Animal();
Dog d = new Dog();
였지만
Animal a = new Animal();
Animal d = new Dog();
처럼 자식 객체를 부모 타입에 담을 수 있음
1-1) 업 캐스팅
1-2) 다운 캐스팅
System.out.println("1. 부모타입 레퍼런스로 부모 객체 다루는 경우");
Parent p1 = new Parent();
//ㄴ부모타입 레퍼런스 ㄴ부모객체
p1.printParent();
System.out.println("2. 자식타입 레퍼런스로 자식 객체 다루는 경우");
Child1 c1 = new Child1();
//ㄴ 자식타입 레퍼런스 ㄴ자식객체
c1.printChild1();
c1.printParent();
System.out.println("3. 부모타입 레퍼런스로 자식 객체 다루는 경우");
Parent p2 = new Child2();
//ㄴ부모타입 레퍼런스 ㄴ자식객체 // 업캐스팅
//p2.printChild2(); heap 메모리에 child 객체를 담고있지만 그 child 안에 담겨있는 parent만 보이는 것
p2.printParent();
여러개의 객체들 중 어떤 객체를 다운캐스팅 할건지 확인하는 연산자
추상 메소드를 갖고있는 부모 클래스를 자식 클래스가 상속받는다면 오버라이딩이 강제화됨
※추상 클래스는 무조건 추상 메소드를 가지고 있지는 않음
1) 자체적으로 객체 생성 불가해서 new 사용 불가
상속 후 자식 클래스를 통해 생성해야함
2) 추상 클래스 내 일반 메서드 호출 가능
인터페이스
추상 클래스가 가지고 있는 기능을 조금 더 까다롭게 강화하기 위해 만든 것
1) 일반 메서드 호출 불가하고, 무조건 추상 메서드만 호출 가능
2) 변수는 final만 받음 (public static final 생략 가능)
3) abstract 예약어 생략 가능 (기본 전제가 abstract 이기 때문)
※헷갈리지 말기
클래스 구현 / 상속 > extends
인터페이스 구현 > implements
인터페이스 상속 > extends