다형성
•
객체들의 타입이 다르면 똑같은 메세지가 전달 되더라도 서로 다른 동작을 하는 것
•
부모=자식
Shape shape2 = new Rectangle();
Java
복사
•
부모 타입이더라도 부모 메소드가 아닌 오버라이딩된 메소드를 호출한다.
•
부모 타입에 자식 타입을 대입해도 형변환을 하지 않아도 된다. 즉 자동 형변환이 된다.
class A {
public void print(){내용1;}
}
class B extends A {
@Override
public void print(){내용2;}
}
class C extends A {
@Override
public void print(){내용3;}
}
public class Practice {
public static void main(String[] args) {
A a = new B();
A a2 = new C();
a.print(); //내용2
a2.print(); //내용3
}
}
Java
복사
•
부모 클래스 타입 변수에 자식 클래스 객체를 생성하면 오버라이딩 메소드는 각자 class의 메소드로 실행된다.
•
부모 타입인 a 변수에 자식 객체인 B를 대입할 수 있는 이유
◦
B객체를 생성할 때 부모클래스부터 메모리에 올라간다.
◦
따라서 변수 a는 A객체를 참조할 수 있다.
•
자식 타입인 b에 부모 객체인 A를 대입할 수 없는 이유
◦
클래스 B의 멤버에 접근할 수 없기 때문이다.
◦
메모리에 올라오지 않았기 때문.
◦
자식=부모는 자식의 필드, 메소드를 포함시키지 않기 때문에 컴파일에러가 난다.
◦
데이터 타입은 heap 메모리에 접근할 수 있는 범위를 제한시킨다.