반응형
오버라이딩이란 조상클래스로 부터 상속받은 메소드의 내용을 변경하는것을 말한다. 상속받은 메소드를 사용하기도 하지만, 자손클래스에서 자손클래스의 용도에 맞게끔 변경해야하는 경우 사용된다.
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까지 출력하게끔 내부를 다시 선언한것을 볼 수 있습니다. 이와 같이 상속받은 메소드를 자신의 맞게 변경하는 경우를 오버라이딩이라고 합니다.
오버라이딩의 조건
오버라이딩을 위해서는 부모클래스의 메소드와, 자식클래스에서 오버라이딩하려는 메소드간에 아래와 같은 조건들이 필요로 합니다.
- 이름이 같아야한다
- 매개변수가 같아야한다
- 반환타입이 같아야한다
즉, 메소드 선언부가 모두 동일해야 한다는 의미이다. 그리고 추가적으로 접근제어자와 예외에 대해서는 다르게 변경해 줄 수 있다
- 접근제어자는 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없다
- 접근제어자 범위 순서는 이와 같다. : public > protected > default > private
- 예를 들면 protected로 선언이 되어있다면 오버라이딩된 메소드의 접근제어자는 public 혹은 protected가 되어야 한다는 것이다
- 조상 클래스 메소드 보다 더 많은 수의 예외를 선언할 수 없다
오버로딩 vs 오버라이딩
이 두가지 단어 형태가 비슷하다 하지만 완전히 다른 개념이니 헷갈리지 말자
- 오버로딩 : 기존에 없는 새로운 메소드를 정의하는 것이다
- 오버로딩의 조건 : 메소드 이름은 같으나, 매개변수의 개수 혹은 타입이 달라야한다
- 오버라이딩 : 상속받은 메소드의 내용을 변경하는 것이다.
반응형
'Language > Java' 카테고리의 다른 글
[Java]제어자 (0) | 2021.12.29 |
---|---|
[Java]super (1) | 2021.12.28 |
[Java]Java toString()메소드?? (0) | 2021.12.28 |
[Java]변수의 초기화 (0) | 2021.12.27 |
[Java]Java 문자열 보간표현식(Formatter) (0) | 2021.12.27 |