다형성이란?

다형성은 하나의 타입에 여러 객체를 대입해서 다양한 기능을 이용할 수 있도록 하는 것이다. 자바는 부모 클래스로 타입 변환을 허용한다. 즉, 부모 타입에 모든 자식 객체가 대입될 수 있다.

[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]자식클래스 변수 = (자식클래스) 부모클래스타입;

-> 변수.자식클래스메소드(); 이게 가능해진다.