[英]How can I call the overridden method in a child class from a parent class's inner class in JAVA?
[英]In Java can you call a public overridden method from a different class?
通常,可以使用super调用重写的方法。 例如:
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() ????
}
}
}
这可能吗? 我有一个解决方法,但是有点草率。
简短的回答,不。
超类实现仅对直接子类可见。 无论如何,外部类都不应该知道方法的各个实现的功能; 耦合=不良。
如果有必要,可能需要重新审查您的设计。
您不能调用super方法-它是java规范的一部分,但这是一个(丑陋的)选项:
public class SuperClass {
public void something(boolean invokeSuper) {
// do something
}
}
public class SubClass extends SuperClass {
public void something(boolean invokeSuper) {
if (invokeSuper) {
super.something();
} else {
// do something
}
}
}
这有点明显,但是...处理此问题的常用方法是将基类方法的主体提取到单独的方法中,以便可以直接调用它。 您可能希望它在性能上是最终的,并强调它不能被覆盖。
public class SuperClass {
public void something() {
doSomething();
}
public final void doSomething() {
out("called from super");
}
}
public class DecidingClass {
public void maybeCallSuperSomething(SuperClass visitor) {
// ...
visitor.doSomething();
// ...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.