문제

컴파일러가 메서드의 가시성을 줄이면 서브 클래스에서 비정기를 재정의 할 때 오류 메시지를 제공하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

서브 클래스의 모든 인스턴스는 여전히 기본 클래스의 유효한 인스턴스 여야하기 때문에 Liskov 대체 원리).

서브 클래스가 갑자기 기본 클래스의 한 가지 속성을 잃어버린 경우 (즉, 공개 방법) 더 이상 기본 클래스를 유효한 대체물이 아닙니다.

다른 팁

이것이 허용된다면 다음과 같은 상황이 가능할 것입니다.

클래스 하위는 클래스 부모로부터 상속됩니다. 부모는 공개 방법이 있습니다 foo, Sub는 그 방법을 비공개로 만듭니다. 이제 선언 된 유형의 bar 부모 :

Parent bar = new Sub();
bar.foo();

그러나 이것이 어떻게 행동 해야하는지는 확실하지 않습니다. 한 가지 가능성은 런타임 오류를 일으키는 것입니다. 다른 하나는 단순히 그것을 허용하는 것입니다. 이는 부모 클래스에 캐스팅하여 외부에서 개인 방법을 호출 할 수있게 해줍니다. 이러한 대안 중 어느 것도 허용되지 않으므로 허용되지 않습니다.

하위 유형은 슈퍼 유형의 인스턴스로 사용할 수 있어야하기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top