210123_JAVA

정재현·2021년 1월 23일
0

TIL

목록 보기
53/80

오늘도 역시 어제에 이어서 상속에 관하여 진행한다.
하위 클래스에서 상속한 상위 클래스의 생성자를 호출할 때, 명시적으로 호출하는 방법에 대하여 알아본다.
명시적으로 호출하지 않으면 인자를 받지 않는 생성자가 자동으로 호출되며
명시적으로 호출하는 방법으로는 super 키워드를 이용하면 된다.

예를 들은 소스코드는 깃허브에 올려놨다.
github: https://github.com/jeong-jaehyeon/JavaProject/blob/javaExercise/src/SuperSubCon.java

이렇듯 하위 클래스에서 생성자 내에서 사용된 키워드 super는 '상위 클래스의 생성자 호출'을 의미한다.

super(1); // 1을 인자로 전달받을 수 있는 생성자 호출
super(1, 2); // 1과 2 두개의 인자를 전달받을 수 있는 생성자 호출

특이점은 상위 클래스의 생성자를 super를 통하여 명시하려면 하위 클래스 생성자의 몸체 부분에 앞서 실행되어야 한다는 점이였다.
그래서 super를 이용한 상위 클래스의 생성자 호출문은 생성자의 첫 문장으로 진행해야 한다.
만약 첫번째 문장이 아니라 나중 문장으로 정의하면 컴파일 오류가 발생한다.

자바는 상속 관계에 있을지라도, 상위 클래스의 멤버는 상위 클래스의 생성자에서 초기화하도록 유도한다고 한다.
(내 생각에도 상위 클래스의 멤버는 상위 클래스에서 확실하게 처리해주는게 좋다고 생각한다. 그치만 하위 클래스에서 초기화하도록 해야하는 구현 방식을 사용해야한다면? 어쩔수없겠지.)

그래서 결론은 아무리 상속 관계에 있는 두 클래스라고 할지라도 인스턴스 변수는 각 클래스의 생성자를 통해서 초기화하는 것이 맞다 라는것이다.

참고로 자바는 단일 상속만을 지원한다.
그러니깐,

class AAA{...}
class ZZZ extends AAA{...}

이렇게.
다만 상속의 깊이는 얼마든지 가능하다고 한다.

class AAA{...}
class ZZZ extends AAA{...}
class SSS extends ZZZ{...}

이렇게.

내일은 상속과 생성자의 호출에 대한 문제를 구현하고,
클래스 변수, 메소드와 상속에 대하여 진행한다.

오늘의 코멘트: TIL 진행하면서 너무 딴짓을 많이한다. 좀 더 집중하도록.

profile
"돈받고 일하면 프로다"

0개의 댓글