BACK/JAVA

[JAVA] 실전 자바 - 상속, super

연듀 2024. 1. 30. 16:57

 

상속

 

기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해 준다.

이름 그대로 기존 클래스의 속성과 기능을 그대로 물려받는 것이다.

 

  • 자바는 다중 상속을 지원하지 않는다.
  • 같은 이름의 메서드를 가진 여러 클래스를 상속 받는다면, 어떤 메서드를 선택해야 할지 모르는 문제가 있기 때문이다. 

 

 

상속과 메모리 구조

 

 

new 키워드로 자식이 생성될 때 부모 인스턴스까지 포함해 인스턴스를 생성한다.

(참조값은 하나지만 그 안에 두가지 클래스 정보가 공존)

 

참조값.메서드()를 하면

호출하는 변수의 타입(클래스)을 기준으로 메서드를 찾는다.

 

자식 클래스의 참조값.메서드()시 자식 클래스에 해당 메서드가 없으면 부모 클래스에서 찾아 호출한다.

계속 올라가 찾아도 없으면 컴파일 오류

 

 

 

상속과 메서드 오버라이딩

 

오버라이딩: 부모에게 상속받은 기능(메서드)을 자식이 재정의 하는 것

@Overriding을 사용하면 어노테이션이 붙은 해당 메서드가 부모에 없으면 컴파일 오류가 발생한다.

 

 

 

메서드 오버라이딩 조건

  • 메서드 이름, 반환 타입, 매개변수 타입/순서/개수가 같아야 한다.
  • 접근 제어자가 상위 클래스의 메서드보다 더 범위가 좁으면 안된다.
  • 상위 클래스의 메서드보다 더 많은 체크 예외를 throws로 선언할 수 없다.
  • static, final, private 키워드가 붙은 메서드는 오버라이딩 될 수 없다.
  • 생성자는 오버라이딩 할 수 없다.

 

 

super - 부모 참조

 

부모와 자식의 필드명이 같거나 메서드가 오버라이딩 되어 있으면, 자식에서 부모의 필드나 메서드를 호출할 수 없다.

super 키워드를 사용하면 부모를 참조할 수 있다.

 

 

 

super - 생성자

 

상속 관계를 사용하면 자식 클래스의 생성자에서 부모 클래스의 생성자를 반드시 호출해야 한다.

  • 자식 클래스의 생성자 첫줄에 반드시 super(..) 를 호출해야 한다.
  • 단, 기본 생성자를 호출하는 것은 생략 가능 하다. super()

 

 

 

 

참고) 김영한 - 실전 자바

https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard