자바 6 의 @ override 주석 과 자바 5 의 다른 점
3179 단어 OO
먼저 아래 의 예시 코드 를 보십시오.
Parent.java
public class Parent...{
public void parentMethod() ...{
}
}
IChild.java
public interface IChild ...{
void interfaceMethod();
}
Child.java
public class Child extends Parent implements IChild ...{
@Override
public void parentMethod() ...{
}
@Override
public void interfaceMethod() ...{
}
}
코드 가 매우 간단 하기 때문에 나 는 설명 을 하지 않 겠 다.
상기 코드 는 jdk 6 에서 컴 파일 할 수 있 습 니 다.
jdk 5 에서 컴 파일 을 통과 할 수 없습니다. 출력 된 오류 정 보 는 다음 과 같 습 니 다.
Child. java: 7: 부모 클래스 를 덮어 쓰 지 않 는 방법
@Override
^
오류
위의 오류 정 보 는 Child. java 일곱 번 째 줄 의 Override 주석 이 틀 렸 다 고 합 니 다. 잘못된 이 유 는 이 방법 (interfaceMethod) 이 부모 방법 이 아니 기 때 문 입 니 다.
물론 이 방법 은 실 현 된 인터페이스 에서 의 방법 이지 만 이 문법 jdk 6 의 아래 는 통과 할 수 있 습 니 다. 즉, 자바 6 은 부 류 를 덮 는 방법 과 인 터 페 이 스 를 실현 하 는 방법 을 모두 override 라 고 생각 합 니 다. jdk 5 는 이렇게 생각 하지 않 습 니 다. 이것 이 당초 jdk 5 의 bug 인지, 아니면 당초 부 류 를 덮 는 방법 과 인 터 페 이 스 를 실현 하 는 방법 이 다르다 고 생각 했 는 지 모 르 겠 습 니 다.알 수 없다.그러나 OO 의 측면 에서 볼 때 부모 클래스 를 덮 는 방법 과 인 터 페 이 스 를 실현 하 는 방법 은 모두 override 라 고 볼 수 있다. 그들의 목적 은 모두 똑 같 고 모두 재 활용 하기 위해 서 이 며 다 중 적 인 표현 방식 이기 때문이다.이것 은 jdk 6 의 지원 이라는 기능 에서 알 수 있다.
하마터면 잊 을 뻔 했다.
표준 자바 api 문서 자바 5 는 자바 6 의 Override annotation 에 대한 설명 과 같 습 니 다.
java5:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
java6:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
두 단락 의 설명 이 똑 같 아서 헷 갈 리 는 것 은 자바 6 문서 에서 Override 가 interface 에 대한 지원 을 언급 하지 않 았 다 는 것 이다.
덮어 쓰기 (Override) 와 다시 불 러 오기 (Overload) 의 비교
사실 매우 본질 적 인 차 이 는 바로 함수 특징 을 보 는 것 이다. 덮어 쓰기 (Override) 의 두 함수 의 함수 특징 이 같 고 과부하 (Overload) 의 두 함수 의 함수 이름 은 같 지만 함수 특징 은 다르다.함수 특징 은 함수 명, 매개 변수의 유형 과 개 수 를 포함한다.Override 는 계승 할 때 함수 가 계승 할 함수 와 특징 이 같다 면 이 키 워드 를 더 하면 이 하위 클래스 의 이 함 수 를 사용 할 때 부모 클래스 (또는 초 클래스) 의 함수 가 보이 지 않 고 덮어 씁 니 다.예 를 들 어 Derived 는 Base 를 계 승 했 습 니 다. Base 에 void A (int a) 가 있 습 니 다. 만약 에 Derived 에 A 가 잘 쓰 지 못 하거나 이런 종류 에 맞지 않 는 다 고 생각 되면 A 의 코드 를 다시 쓰 고 싶 습 니 다. 그러면 override void A (int a) 를 쓰 면 원래 의 그 함수 가 새로 쓴 이것 에 의 해 덮어 집 니 다.Overload 는 과부하 입 니 다. 즉, 함수 이름 이 같 고 함수 특징 이 다 르 며 시스템 은 당신 이 제공 한 매개 변수 에 따라 해당 하 는 함 수 를 조정 합 니 다.예 를 들 어 void A (int a) 와 void A (int a, int b) 는 A (1) 를 사용 하면 첫 번 째 로 조정 하고 A (1, 1) 라면 두 번 째 로 조정 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ExtJS의 onRender 및 renderThe control structure (inversion of control) that is the result of the application of a template pattern is often referr...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.