당신은 외부 B에서 호출 할 수 없습니다 ...하지만 B 내에서 당신은 그것을 호출 할 수 있습니다 :이 B 내에서 모든 코드에서 수행 할 수
super.test();
- test()
메서드 자체에있을 필요는 없습니다. 그래서 예를 들면 :
public void foo() {
// Call the superclass implementation directly - no logging
super.test();
}
@Override void test() {
System.out.println("About to call super.test()");
super.test();
System.out.println("Call to super.test() complete");
}
주 당신이 정말로 가이 메소드를 오버라이드 (override)하는 것을 의미 않았다 컴파일러를 알려주는 @Override
주석. (메서드 이름에 오타가있을 경우 메서드 이름에 오타가 있으면 빠르게 찾을 수 있습니다.)
B 외부에서 호출 할 수없는 이유는 B 이 메서드보다 우선합니다. 재정의 목적은 원래의 행동을 대체하는 것입니다. 예를 들어, 매개 변수가있는 메소드에서 B는 수퍼 클래스 구현을 호출하거나 다른 작업을 수행하기 전에 매개 변수로 무언가를 수행하고 (자체 규칙에 따라 유효성을 검사) 수행하고자 할 수 있습니다. 외부 코드가 A의 버전을 호출 할 수 있다면 B의 기대치 (및 캡슐화)를 위반하게됩니다.
귀하의 방법은 현재 반환 형식을 가지고 있지 않았고, 클래스 선언을 사용'()'잘못 - 그것은 (물론, 외부 코드없이) 가능한 한 완전한 같은 사례를 만들려고 노력 가치가있다. 그것들을 멋지게 포맷하는 데 약간의 노력을하면 도움이됩니다. 나는 이번에 그걸 고쳤지만 미래의 질문에 더 많은 노력을 기울이십시오. –
나는 다음 번에 그 일을 할 것이지만 나는 개념에 더 관심이있다. –
네,하지만 잘못된 코드는 찾고있는 개념에서 벗어난 것입니다. 그것이 내 요점이다. 사람들이 가능한 한 쉽게 대답 할 수 있도록 질문을하기 위해 노력해야합니다. 당신은 사람들이 당신을 돕기 위해 시간을 보내길 요청하고 있습니다. 당신은 당신의 질문을 표현할 수있는 것에 대해 감사해야합니다. –