@인터페이스의 메서드 구현을 덮어쓸까요?
하는 메서드에 ""를 ?@Override
주석의 javadoc에는 다음과 같이 표시됩니다.
메서드 선언이 슈퍼클래스의 메서드 선언을 덮어쓰기 위한 것임을 나타냅니다.메서드가 이 주석 유형으로 주석을 달지만 슈퍼 클래스 메서드를 덮어쓰지 않는 경우 오류 메시지를 생성하기 위해 컴파일러가 필요합니다.
인터페이스는 엄밀히 말하면 슈퍼클래스가 아니라고 생각합니다.아니면 그러한가?
가능하면 @Override를 사용해야 합니다.그것은 단순한 실수가 일어나는 것을 방지한다.예:
class C {
@Override
public boolean equals(SomeClass obj){
// code ...
}
}
이것은 올바르게 덮어쓰지 않기 때문에 컴파일 되지 않습니다.
인터페이스를 실장하는 메서드(1.6 이상만) 또는 슈퍼 클래스의 메서드를 덮어쓰는 메서드도 마찬가지입니다.
javac의 동작은 1.5에서는 주석을 금지하고 1.6에서는 금지하고 있습니다.주석으로 컴파일 시간 체크가 추가되므로 1.6을 사용하시는 경우 참고하겠습니다.
.@Override
가능하다면요.
JDK 5에서는 슈퍼클래스의 메서드를 덮어쓰고, JDK 6, 7에서는 슈퍼클래스의 메서드를 덮어쓰고, 인터페이스의 메서드를 구현하는 것을 의미합니다.그 이유는 앞서 설명한 바와 같이 컴파일러가 사용자가 메서드를 덮어쓰기(또는 구현)하고 있다고 생각되지만 실제로는 새로운 메서드(다른 시그니처)를 정의하고 있는 오류를 검출할 수 있기 때문입니다.
equals(Object)
★★equals(YourObject)
예를 들면, 인터페이스 실장에서도 같은 인수를 사용할 수 있습니다.
인터페이스의 실장 방법에 주석을 달 필요가 없는 것은, JDK 5가 이것을 컴파일 에러라고 플래그를 붙였기 때문이라고 생각합니다.JDK 6이 이 주석을 필수화하면 하위 호환성이 깨집니다.
에서는 이클립스 IDE(IntelliJ)를 하고 있습니다.@Override
주석은 프로젝트가 JDK 6+ 프로젝트로 설정된 경우에만 인터페이스 메서드를 구현할 때 추가됩니다.나는 이클립스가 비슷하다고 상상한다.
는 다른 것 .@Implements
석입니니다다
기회가 있을 때마다 쓰고 싶어요.자세한 내용은 Java의 @Override 주석을 사용하는 시기와 그 이유를 참조하십시오.
5.에서는 JDK 5.0을 할 수 .@Override
주석은 인터페이스에 선언된 메서드(컴파일 오류)를 구현하고 있지만 JDK 6.0에서는 허용됩니다.따라서 필요에 따라 프로젝트 기본 설정을 구성할 수 있습니다.
구체적인 클래스가 추상 메서드를 재정의하지 않는 경우 사용@Override
컴파일러는 항상 구현되지 않은 메서드에 대해 경고하기 때문에 구현은 미해결 사항입니다.이러한 경우, 가독성을 떨어뜨린다는 주장이 제기될 수 있습니다. - 코드로 읽는 것이 더 많고, 더 적게는 코드라고 불립니다.@Override
and@Implement
.
javadoc in java8을 읽으면 interface Override 선언에서 다음을 찾을 수 있습니다.
다음 조건 중 하나 이상이 충족되지 않는 한 오류 메시지를 생성하기 위해 이 주석 유형 컴파일러가 메서드에 주석을 달아야 하는 경우:
- 메서드는 슈퍼타입으로 선언된 메서드를 덮어쓰거나 구현합니다.
- 메서드에 {@linkplain Object}에 선언된 모든 공용 메서드의 시그니처가 재정의됩니다.
따라서 적어도 java8에서는 인터페이스 메서드의 실장에서는 @Override를 사용해야 합니다.
자신의 클래스에서 상속받은 자신의 메서드를 덮어쓰더라도 일반적으로 ide를 사용한 리팩터링은 중단되지 않습니다.그러나 라이브러리에서 상속된 메서드를 재정의하는 경우 이 메서드를 사용하는 것이 좋습니다.그렇지 않으면 나중에 라이브러리를 변경할 때 오류가 발생하지 않지만 잘 숨겨진 버그가 발생할 수 있습니다.
JDK에는 문제가 없습니다.Eclipse Helios에서는 구현된 인터페이스 메서드에 대해 @Override 주석을 사용할 수 있습니다.Eclipse Galileo에 대해서는 JDK 5와 6 중 어느 쪽이든 @Override 주석이 허용되지 않습니다.
를 interface
는 입니다.abstract
★★★★★★@Override
는, 이 「」의 경우, 「」의 인 것을 합니다.interface
「」를 하지 않는 경우, 「」@Override
한 사람abstract
가 에서 클래스는 됩니다.interface
미스매치, 미스매치interface
메서드는 구현되지 않은 상태로 유지됩니다.@
메서드가 슈퍼타입에서 선언된 메서드를 재정의하거나 구현합니다.
분명히 언급하고 있는 것은abstract
슈퍼클래스interface
를 슈퍼타입이라고 부를 수 없습니다.그렇게,@Override
용장성이 있어 합리적이지 않다.interface
구체적인 클래스에서의 방법 구현.
나는 이것이 자바6 컴파일을 위해 일부 코드가 필요한 유일한 이유일 때가 많습니다.그럴 가치가 있을지 모르겠네요.
를 포함할 때의 문제@Override
전화하는 걸 잊은 것 같아서super.theOverridenMethod()
매우 혼란스러운 방법입니다.이건 분명할 거야.자바가 제공하는 것은@Interface
여기서 사용할 수 있습니다.또 다른 멍청한 자바인...
Java 6 이후 버전에서는@Override
인터페이스를 실장하는 메서드의 경우.
단, 오버라이드는 슈퍼클래스에서 메서드를 가지고 서브클래스에서 구현하고 있음을 의미합니다.
인터페이스를 실장하고 있는 경우는, 이 기능을 사용해 주세요.@Implement
다른, '다 하다'는 안 돼요.@Override
에서 ★★★★★★★★★★★★★★★★★★★★★★」@Override
인터페이스를 구현하는 클래스를 만드는 동안 "실장되지 않은 메서드 생성"을 지시할 때 주석을 표시합니다.
을 사용하다 이 왜 그렇게 되는지 하는 데 .@override
너무 요.
public interface Restaurant(){
public boolean getBill();
public BigDecimal payAmount();
}
public interface Food() extends Restaurant{
public boolean haveSomeFood();
public boolean drinkWater();
}
public class Hungry() implements Food{
public boolean haveSomeFood(){}
public boolean drinkWater(){}
public boolean getBill(){}
public BigDecimal payAmount(){}
}
예에서는 I am " If I" 입니다.Hungry
, 을 가질 수 .Food
Restaurant
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!!!
어떻게?
- " " "
Food
에는 키워드가 .extends Restaurant
됩니다. - 인터페이스에서 실제로 재정의된 메서드에는 키워드가 없습니다.
@override
- 따라서 키워드 extensions Restaurant를 삭제해도(또는 인터페이스를 삭제해도) 에러는 표시되지 않습니다.
@override
레스토랑 인터페이스를 삭제하려고 하면 컴파일 오류가 나타납니다.
주의: 인터페이스를 실장할 때, 그 인터페이스가 다른 인터페이스로 확장되는지, 확장 가능한지, 상속이 삭제될 수 있는지 알 수 없는 경우가 있습니다.그래서 항상 사용하는 것이 좋다.@override
(키워드)
언급URL : https://stackoverflow.com/questions/212614/should-we-override-an-interfaces-method-implementation
'programing' 카테고리의 다른 글
Java에서 sha256으로 문자열을 해시하려면 어떻게 해야 합니까? (0) | 2022.07.05 |
---|---|
어떻게 공짜가 얼마를 공짜로 주는지 알 수 있죠? (0) | 2022.07.05 |
여러 탭을 열 때 Nuxt 브라우저가 충돌합니다. (0) | 2022.07.05 |
Java 형식의 yyy-MM-dd 형식의 달력 날짜 (0) | 2022.07.05 |
직렬화 및 직렬화 해제 중 JSON 속성의 다른 이름 (0) | 2022.07.05 |