오버라이딩의 조건은 무엇일까??
1.선언부가 같아야 한다 ( 이름 , 매개변수 , 리턴타입 )
2.접근제어자를 좁은 범위로 변경할 수 없다.
Ex ) 조상의 메서드가 Protected 라면 , 범위가 같거나 넓은 Protected or public 으로만 변경 할 수 있다.
3.조상클래스의 메서드보다 많은 수의 예외를 처리할 수 없다.
다음 코드를 보자.
오버라이딩을 구현하기 위해서는... 다음과 같이 3가지 조건을 지켜야 합니다.
먼저 선언부가 같아야합니다. 오버라이딩은 메서드의 내용만을 변경하는 것이기 때문에...
선언부는 상속받은 메서드와 정확히 일치해야합니다. 만일 매개변수가 달라지면... 오버라이딩이 아니라 오버로딩이 되어버립니다.
재정의가 아니라 완전히 새로운 메서드가 하나 추가되는 것이지요.
두 번째로... 접근제어자를 좁은 범위로 변경해서는 안된다는 것입니다.
오버라이딩을 할 때는 선언부를 똑같이 해야하지만... 접근제어자는 변경할 수 있습니다.
일단 오버라이딩 할 때... 접근제어자를 변경할 수 있지만, 좁은 범위로 변경해서는 안된다고만 알아두고 넘어가시기 바랍니다.
조상클래스의 메서드 보다 많은 수의 예외를 선언할 수 없다는 것입니다.
메서드에는... 메서드를 수행하는 동안 이러이러한 예외상황이 발생할 수 있다는 것을 알려주기 위해 예외를 선언할 수 있습니다.
그 예외의 개수가 오버라이딩하려는 메서드, 즉 덮어쓰려는 메서드보다 더 많아서는 안된다는 것입니다.
여기서 주의해야 할 점은... 단순히 개수 문제가 아니라는 것입니다.
Child클래스는 조상의 parentMethod보다 적은 수의 예외를 선언해서 오버라이딩 했습니다. 오버라이딩을 잘 했죠.
Child2클래스 역시 조상의 parentMethod보다 적은 수의 예외를 선언해서 오버라이딩 했지만...
Exception은 오버라이딩할 조상의 메서드에는 선언되어 있지 않은 예외이기 때문에... 안됩니다.
조상의 메서드에 선언된 IOException과 SQLException중의 하나이어야 한다는 점... 주의하시기 바랍니다.
이 중에서 제일 중요한 것은 첫번째 조건... 선언부가 같아야 한다는 것이고요...
마지막으로... 당연한 얘기인데... static메서드를 인스턴스 메서드로, 또는 그 반대로 오버라이딩 할 수 없습니다.
'Backend > java' 카테고리의 다른 글
Super의 정의 (0) | 2018.08.09 |
---|---|
오버라이딩 Vs 오버로딩 의 차이점 (0) | 2018.08.09 |
오버라이딩(Overriding)이란?? (0) | 2018.08.09 |
Object 클래스는 무엇일까 ? (0) | 2018.08.09 |
단일상속 ( single inheritance ) (0) | 2018.08.09 |
#IT #먹방 #전자기기 #일상
#개발 #일상