Java

[Java]Heterogenious(이질화) & Homogenious(동질화)

MoZZANG 2022. 3. 15. 19:36
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