2024. 1. 28. 15:07ㆍJAVA
이전 글에서는
상속이 뭔지, 사용법은 어떻게 되는지 등에 대해 알아봤다.
이번엔 상속의 특징들에 대해 알아보자.
상속도

상속관계에 있을 때 위의 그림과 같이 표현된다.
extends 를 통한 상속에서는 실선과 화살표로 상속 관계를 나타낸다.
그림에서 알 수 있듯, sub class 들은 super class 를 참조하여 상위 클래스의 정보들을 알아낸다.
어떻게? extends 키워드 + 상위 클래스명 으로.
반면, 상위 클래스는 하위 클래스의 정보를 알 수 없다 (아무 키워드도 적어주지 않았으니까)
따라서, 상속 관계가 맺어져 있어도 하위 클래스에 있는 정보를 활용할 수 없다.
(물론 static 변수, static 메서드 라면 사용 되겠지만)

단일 상속
자바에서는 extends 를 통한 상속 대상(super class) 수를 1개로 제한한다.
public class SubBird extends SuperAnimal {} // 가능
public class SubBird extends SuperAnimal, SuperLife {} // 불가능
왜일까?

그림과 같이 다중 상속이 가능하다고 치자.
상위 클래스들이 공통된 멤버 변수, 메서드명을 가지고 있다면 어떤 상위 클래스(Life ? Animal)의 정보를 읽어야 할까?
..? 알기 어렵다. 허용한다 한들 휴먼 에러 및 그에 따른 사이드 이펙트가 많이 발생하게 될 것이다.
이러한 문제를 다이아몬드 문제라 한다.
이런 문제를 미연에 방지하기 위해, 자바진영에서는 다중상속을 막고 단일 상속만 허용하게 되었다.
따라서, 이렇게는 된다.

그래도 역시, 여러 개를 상속 시키고 싶은데..
어떻게 해야 할까?
자바에서는 인터페이스 다중 구현을 통해 이런 문제를 회피 한다고 한다.
어떻게 다른지는 모르겠지만, 뭔가 방법이 있는 모양이다.
그건 근미래에 다시 알아보자.
일단 상속부터 공부한다.
'JAVA' 카테고리의 다른 글
| 상속_기능추가 (0) | 2024.01.28 |
|---|---|
| 상속_메모리 구조 (0) | 2024.01.28 |
| 상속 (0) | 2024.01.28 |
| static_메서드2 (0) | 2024.01.23 |
| static_메서드1 (0) | 2024.01.23 |