[Java의 정석] 오버라이딩(overriding)

younghyun·2022년 10월 10일
0

Java의 정석

목록 보기
11/12
post-thumbnail

오버라이딩이란

오버라이딩이란, 상속받은 메서드의 내용을 변경하는 것을 말한다.

오버라이딩의 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수가 같아야 한다.
  3. 반환 타입이 같아야 한다.

한마디로, 선언부가 일치해야 한다.
주의할 점으로는,

  1. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  2. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
  3. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.

오버로딩 vs. 오버라이딩

  • 오버로딩: 기존에 없는 새로운 메서드를 정의하는 것
  • 오버라이딩: 상속받은 메서드의 내용을 변경하는 것

super

super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 상속받은 멤버와 자신의 멤버의 이름이 같을 때 super를 붙여서 구별하는 용도로 쓰인다.

super()

super()는 조상 클래스의 생성자를 호출하는 데 사용된다.

  • Object클래스를 제외한 모든 클래스의 생성자 첫 줄에 생성자, this() 또는 super()를 호출해야 한다.
    • 조상의 멤버들이 먼저 초기화되어 있어야 자손 클래스에서 사용할 수 있기 때문이다.
    • 그렇지 않으면 컴파일러는 생성자의 첫 줄에 super(); 를 자동으로 추가한다.
class Parent {   // extends Object (모든 생성자는 Object 클래스를 상속함)
    protected String name;
    protected String health;
    
    public Parent(String name, String health) {
    
        // super(); 자동 생성됨 (Object()를 호출하는 것)
        this.name = name;
	    this.health = health;
    }
}

class Child extends Parent {
    protected String gender;
    
    public Child(String name, String health, String gender){
        super(name, health);    // Child가 초기화되려면 Parent부터 초기화시켜주어야 함
	    this.gender = gender;
    }
}
profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글