다형성이란?
다형성은 하나의 타입에 여러 객체를 대입해서 다양한 기능을 이용할 수 있도록 하는 것이다. 자바는 부모 클래스로 타입 변환을 허용한다. 즉, 부모 타입에 모든 자식 객체가 대입될 수 있다.
[ex]
Animal(부모), Cat(자식)
Cat cat = new Cat();
Animal animal = cat; // cat이 Animal타입에 매칭되는 것이 가능하다. 즉, Animal animal = new Cat();
★부모타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근 가능. (형변환 된 이후에는 멤버변수, 메소드는 부모것만 쓴다.)
하지만, 메소드가 자식 클래스에서 오버라이딩 되었으면 자식 클래스의 메소드가 실행된다.
[ex]
class Parent{
void method1(){...};
void method2(){...};
}
class Child extends Parent{
void method2(){...}; //Parent에서 오버라이딩
void method3(){...}; //형변환 이후 부를 수 없음.
}
class Main{
public static void main(String args[]){
Child child = new Child();
Parent parent = child; //형변환
parent.method1(); //형변환 했지만 접근가능 Parent의.
parent.method2(); //오버라이딩 된 메소드가 호출됨 Child의.
parent.method3(); //접근불가능
}
}
강제 형변환(Casting)
강제 형변환이란, 부모 타입을 자식 타입으로 변환하는 것을 말한다. 자식 타입에 선언된 멤버변수와 메소드를 사용해야할 때 강제 형변환 함.
[sy]자식클래스 변수 = (자식클래스) 부모클래스타입;
-> 변수.자식클래스메소드(); 이게 가능해진다.