Language/Java

[Java]오버라이딩(Overriding)

Hoplin 2021. 12. 28. 18:28
반응형

오버라이딩이란 조상클래스로 부터 상속받은 메소드의 내용을 변경하는것을 말한다. 상속받은 메소드를 사용하기도 하지만, 자손클래스에서 자손클래스의 용도에 맞게끔 변경해야하는 경우 사용된다.

class Points{
    protected int x;
    protected int y;
    String getLocation(){
        String msg = "X : " + this.x + " Y : " + this.y;
        return msg;
    }
}

class Point3D extends Points{
    protected int z;

    @Override
    String getLocation(){
        String msg = "X : " + this.x + " Y : " + this.y + " Z : " + this.z;
        return msg;
    }
}

위 클래스를 예시로 들겠습니다. Points라는 클래스가 부모클래스이고, Point3D가 자식 클래스 입니다. 이 두 클래스에 모두 getLocation()메소드가 선언되어있습니다. Point3D에서 부모클래스 Points에도 있는 getLocation을 다시 선언하였고, z까지 출력하게끔 내부를 다시 선언한것을 볼 수 있습니다. 이와 같이 상속받은 메소드를 자신의 맞게 변경하는 경우를 오버라이딩이라고 합니다.

 

오버라이딩의 조건

 

오버라이딩을 위해서는 부모클래스의 메소드와, 자식클래스에서 오버라이딩하려는 메소드간에 아래와 같은 조건들이 필요로  합니다.

  • 이름이 같아야한다
  • 매개변수가 같아야한다
  • 반환타입이 같아야한다

즉, 메소드 선언부가 모두 동일해야 한다는 의미이다. 그리고 추가적으로 접근제어자와 예외에 대해서는 다르게 변경해 줄 수 있다

 

  1. 접근제어자는 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없다 
    • 접근제어자 범위 순서는 이와 같다. :  public > protected > default > private
    • 예를 들면 protected로 선언이 되어있다면 오버라이딩된 메소드의 접근제어자는 public 혹은 protected가 되어야 한다는 것이다
  2. 조상 클래스 메소드 보다 더 많은 수의 예외를 선언할 수 없다

오버로딩 vs 오버라이딩

이 두가지 단어 형태가 비슷하다 하지만 완전히 다른 개념이니 헷갈리지 말자

 

  • 오버로딩 : 기존에 없는 새로운 메소드를 정의하는 것이다
    • 오버로딩의 조건 : 메소드 이름은 같으나, 매개변수의 개수 혹은 타입이 달라야한다
  • 오버라이딩 : 상속받은 메소드의 내용을 변경하는 것이다.

 

반응형