1. 오버라이딩 (overriding)
- 상속관계에 있는 클래스들간에 같은 이름의 메소드를 정의하는 행위로 처음 메소드의 기능을 덮어버리는 것
- 즉, 상위클래스의 있는 메소드의 내용을 하위클래스에서 바꿈
- 기존 클래스의 메소드 구현 부분만 약간 변화시켜 새로운 클래스를 생성할 수 있다.
- Name, Return type, Argument list가 같아야 한다.
2. 오버라이딩 조건
- final로 선언된 메소드는 오버라이딩(중복정의) 할 수 없다.
- static 메소드는 반드시 static 메소드로 오버라이딩 해야 한다.
- 오버라이딩된 메소드의 접근변경자가 더 private하면 안 된다.
è 새로 오버라이딩 한 메소드는 아래의 접근변경자에서 우측 방향에 있는 또는 같은 종류의 접근변경자만 지정할 수 있다는 것이다.
è private --> (friendly) --> protected --> public
class A { void m(int i, String s) {} // 메소드 정의 }
class B extends A { private void m(int i, String s) {} }
// friendly를 private로 중복정의 불가
- 오버라이딩된 메소드가 상위클래스의 메소드보다 더 넓은 범위의 확인 예외(checked exception)를 발생시키면 안 된다.
3. 오버라이딩 예제
public class Parent4{
public void restDay(){
System.out.println("잠을 잔다.");
}
}
public class Child4 extends Parent4{
public void restDay(){
System.out.println("데이트를 한다.");
}
}
public class Overriding_Test2{
public static void main(String args[]){
Parent4 p=new Parent4();
Child4 c=new Child4();
p.restDay();
c.restDay();
}
}
실행결과
---------- java ----------
잠을 잔다.
데이트를 한다.
Normal Termination
출력 완료 (0초 경과).

