일반적으로 super로 오버라이드 된 메소드를 호출 할 수 있습니다. 예를 들면 :Java에서 다른 클래스의 public override 메소드를 호출 할 수 있습니까?
public class SuperClass {
public void something() {
out("called from super");
}
}
public class SubClass extends SuperClass {
@Override
public void something() {
out("called from sub");
super.something(); // This is fine
}
public static void main(String[] args) {
new SubClass().something(); // Calls both methods
}
}
하지만 다른 클래스에서 super.something() 메서드를 호출 할 :이게 가능
public class SubClass2 extends SuperClass {
@Override
public void something() {
out("called from sub2");
new DecidingClass().maybeCallSuperSomething(this);
}
public static void main(String[] args) {
new SubClass2().something();
}
}
public class DecidingClass {
public void maybeCallSuperSomething(SuperClass visitor) {
boolean keepGoing = true;
// Do some work, maybe set keepGoing to false
// ...
if (keepGoing) {
// How do I call the Overridden method?
visitor.something() // Causes recursive loop
// visitor.super.something() ????
}
}
}
? 나는 그 자리에서 일할 것이지만 조금은 어색하다.
+1이 아이디어는 LSP에 캡처됩니다 : 그것은 부끄러운 http://en.wikipedia.org/wiki/Liskov_substitution_principle – spatulamania
, 나는 그것이 방법은 수 있는지 여부를 결정하는 빠른 방법으로 이어질 수 생각 불렀다. 해결 방법은 간단합니다. 하위 메서드 내에서 super 메서드를 호출하면됩니다. if (new DecidingClass(). decide (this)) {super.something(); } – mekazu