coding log
반응형

오버라이딩 (overriding)

  • 상속받는 조상의 메서드를 자신(상속받은 클래스)에 맞게 변경하는 것
  • 메소드 동작만을 재정의하는 것
  • 선언부는 못바꾸고 구현부(내용)만 변경 가능

 

오버라이딩의 조건

  1. 선언부 (반환타입, 메서드이름, 매개변수 목록) 가 조상클래스의 메서드와 일치해야 한다.
  2. 접근제어자를 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  3. 예외는 조상클래스의 메서드보다 많이 선언할 수 없다.

 

 

실습

package pkg1;

class MyPoint3 {
    int x;
    int y;
    String getLocation(){
        return "X:"+x+", y:"+y;
    }
}

class MyPoint3D extends MyPoint3 {
    int z;

    // 조상의 getLocation()을 오버라이딩
    String getLocation(){
        return "x:"+x+", y:"+y+", z:"+z;
    }

}
public class OverrideTest {
    public static void main(String[] args) {
        MyPoint3D p = new MyPoint3D();
        p.x = 3;
        p.y = 5;
        p.z = 7;
        System.out.println(p.getLocation());
    }
}

 

출력

x:3, y:5, z:7

 

상속을 받되 오버라이딩했다고해서 원래 메서드가 바뀌지는 않고, 선언할때만 변경한 메서드가 호출된다.

 

 

오버로딩 vs 오버라이딩

두가지가 관계는 없지만 비슷한 이름의 오버로딩과의 비교

  • 오버로딩 (overloading) - 기존에 없는 이름이 같은 새로운 메소드를 정의하는 것
  • 오버라이딩 (overriding) - 상속받은 메소드의 내용을 변경하는 것 (기존의 메소드 재정의) 
반응형
profile

coding log

@iian

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!