Homogenious(동질화)란?
- 같은 타입의 인스턴스 변수에 같은 타입의 메모리 주소를 저장
- 예) Student st = new Student();
Heterogenious(이질화)란?
- 부모타입의 인스턴스 변수에 자식타입의 메모리 할당해서 그 주소를 저장
- [전제조건]
- 두 클래스 사이에 상속관계가 존재해야한다.
- 예) Person person = new Student();
부모타입의 인스턴스 변수가 접근 할 수 있는 범위
1. 부모로부터 상속받는 맴버
2. 자식에서 오버라이딩한 메소드가 우선 호출된다.
※ 자식에서 새롭게 정의한 맴버는 접근불가하다! (오버로딩한 메소드도 포함!)
헤테로 지니어스의 장점
- 메소드의 매개변수를 부모타입으로 정의시 모든 자식타입을 저장할 수 있음으로
- 자식클래스 수만큼 메소드를 오버로딩 할 필요가 없다.
예제를 보면서 알아보자.
▲ 부모 클래스로 쓸 Person을 정의했다.
▲자식클래스로 쓸 Student를 만들고 Person을 상속시켰다. 또한 Student클래스에서 확장한 메소드인 study,
부모클래스의 personMethod()메소드를 오버라이딩 시켰으며, 부모클래스의 personMethod에 매개변수를 넣어서 오버로딩까지 시켰다.
이제 메인메소드에서 호모지니어스(동질화)와 헤테로지니어스(이질화)를 각각 이용하여 출력해보자.
먼저 호모지니어스부터 보자.
▲ 자기가 자신의 클래스에 있는 맴버에 접근하려고 하는 것은 당연한 것이기 때문에 호모지니어스의 경우에는 모든 맴버(오버라이딩, 오버로딩을 포함해 확장한 맴버도 포함)에 접근할 수 있다.
이번엔 헤테로지니어스로 해보자
▲ 호모지니어스든 헤테로지니어스든 오버라이딩한 메소드를 호출하면 기존의 부모클래스에 있는 메소드가 아닌 오버라이딩한 메소드가 항상 출력된다.
헤테로 지니어스형은 상속관계가 있어야지 할 수 있다는 점 주의하자
헤테로 지니어스에서는 부모가 자식에서 확장한 맴버는 기본적으로 볼 수 없기 때문에 부모클래스를 자식클래스로 다운캐스팅 즉, 형변환을 해주어야 사용할 수 있다는 점도 중요하다.
'Java' 카테고리의 다른 글
[Java]추상클래스(Abstract Class)와 추상메소드(Abstract Method) (0) | 2022.03.16 |
---|---|
[Java]Object Class (0) | 2022.03.15 |
[Java]InstanceOf (0) | 2022.03.15 |
[Java]오버라이드(Override) (0) | 2022.03.15 |
[Java]Super() - 부모의 기본생성자 (0) | 2022.03.14 |