컴파일러 경고 알림은 어떤 일이 발생할 수 있는지에 대해 다소 말합니다. 서브 클래스가 doSomething 메소드를 오버라이드 (override)하면 (자), 클래스 인스턴스의 작성시의 동작이 변경 될 가능성이 있습니다. 이것은, 설계에 따라서 위험 할지도 모릅니다. 컴파일러 예외가 아니라 경고입니다.
class SomeClass {
public SomeClass() {
doSomething();//Warning - Overridable method call in constructor
SomeClass.this.doSomething();//Seems OK, but is not
}
public void doSomething() {
System.out.println("parent");
}
}
public class SomeOtherClass extends SomeClass {
@Override
public void doSomething() {
System.out.println("child");
}
public static void main(String[] args) {
SomeClass a = new SomeClass();
SomeOtherClass b = new SomeOtherClass();
}
}
인쇄 :
parent
parent
child
child
그냥 다른 클래스, doSomething
메소드를 오버라이드 (override)하지 final
로 표시 할 수 원하는 경우
이를 증명하기 위해, 단지 그것을 테스트하는 코드를 확장 :
class SomeClass {
public SomeClass() {
doSomething();//Warning - Overridable method call in constructor
SomeClass.this.doSomething();//Seems OK
}
public final void doSomething() {
System.out.println("parent");
}
}
그런 다음 하위 클래스가이를 무시하려고 시도하면 c ompiler가 오류를 발생시킵니다.
public class SomeOtherClass extends SomeClass {
@Override
public void doSomething() { //compiler error
System.out.println("child");
}
//...
}
컴파일러 경고 알림은 어떤 일이 발생할 수 있는지를 알려줍니다. 서브 클래스가'doSomething' 메소드를 오버라이드 (override)하면 (자), 클래스 인스턴스를 생성 할 때의 동작을 변경할 수 있습니다. 이것은, 설계에 따라서 위험 할지도 모릅니다. 컴파일러 예외가 아니라 경고입니다. –
메서드를 재정의 할 수있게 하시겠습니까? 예, 아니요, 또는 누가 누구인가? doSomething() 메서드에 대해 public, private 또는 protected/package 범위를 사용하십시오. –
"어떻게해야 제대로 수행 할 수 있습니까?"가능한 경우 이와 같은 것을 피할 수 있습니다. 메소드를 호출하거나 'final'로 선언하십시오. 항상 쉬운 일은 아니지만 최소한 고려해야합니다. – Marco13