상속을 어떤 관점에서 보느냐에 따라 생성자도 상속이 된다 vs 생성자는 상속이 되지 않는다 로 의견이 나뉜다.
생성자는 상속이 되지 않는다. 의 입장
상속은 슈퍼 클래스의 멤버를 서브 클래스가 그대로 사용을 하거나 필요에 따라 추가해서 사용할 수 있어야하기 때문에, 생성자는 상속이 아니다. 라고 말한다.
나는 메모리 관점에서 생성자는 상속이 된다 라는 입장이다.
첫 번째, 생성자는 클래스명으로 된 특별한 메서드다.
클래스가 로드될 때, 메서드 영역에 메서드와 함께 생성자가 포함되어 저장된다.
즉, 생성자는 메서드와 같은 메모리 공간에 존재하며 용도가 조금 특별할 뿐이다.
두 번째, 생성자와 메소드를 호출하는 방식이 동일하다.
객체가 갖고 있는 메서드를 실행할 때에는, 힙 영역에 해당 메서드의 주소값을 가지고, 메서드 영역에서 주소값에 해당하는 메서드 호출하는 방식을 갖는다.
생성자도 똑같다.
생성자에 대한 주소값과 메서드에 대한 주소값 모두 힙 영역에 갖고 있다가, 필요시 참조를 통해 메서드를 호출한다는 것이 동일하다.
세 번째, 자식 객체는 부모 객체의 생성자를 호출할 수 있는 주소값을 모두 가지고 있다.
서브클래스 객체가 생성될 때, 해당 객체는 부모 클래스의 필드를 포함하여 모든 필드가 힙 영역에 저장된다.
그렇기때문에 this 키워드로 나라는 자기 자신의 객체를 가리키듯, super키워드를 통해 슈퍼 클래스 즉, 부모 객체를 가리킬 수 있는 것이다.
그래서 나는 상속이 된다고 생각한다.
자식 객체에서 부모 객체에 속하는 메서드를 실행할 수 있다는 것은 상속을 받았다는 것이 아닐까?!
어떤 관점으로 보느냐에 따라 다르게 생각할 수 있는 문제인 것 같다.
아래에 상속이 아니라고 말해주는 스택오버플로 링크를 걸어둔다.
https://stackoverflow.com/questions/1644317/java-constructor-inheritance
그리고 밑에는 카톡으로 친구들의 의견을 물어본 것들을 첨부해본다.
상속 이다 vs 상속 아니다
'언어(Language) > JAVA' 카테고리의 다른 글
[JAVA] 예외(Exception)는 어디서 처리하는게 좋을까? (0) | 2024.07.24 |
---|---|
내가 생각하는 SOLID원칙 (0) | 2024.07.12 |
ERROR: Exception in thread "main" java.lang.ClassCastException (0) | 2024.05.23 |
[Java] Java는 컴파일과 인터프리터 중 어떤 언어에 속할까? (0) | 2024.02.01 |
[java/error] Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Integer (0) | 2023.01.24 |