我可以看到一个子类如何继承一个超类方法,但是如果超类想要使用该方法的子类版本呢?
答案 0 :(得分:6)
在超类中,您需要抽象地定义方法。
示例:
abstract protected void doSomething();
然后@Override
子类中的这个方法。
现在你的超类知道这个,并且可以调用它。
编辑,这也要求超类是抽象的,否则你不能在类上使用abstract
方法。
答案 1 :(得分:1)
你的问题的一般答案是让你的超类自己调用一个可覆盖的方法。这是一个例子:
<强>超类强>
public class MyClass {
// This method calls other (overridable) methods on itself
public void run() {
doSetup();
doAction();
doCleanup();
}
/**
* These three methods could be abstract if there's no default behavior
* for the superclass to implement. In this example, these are concrete
* (not abstract) methods because there is a default behavior.
*/
protected void doSetup() {
System.out.println( "Superclass doSetup()" );
}
protected void doAction() {
System.out.println( "Superclass doAction()" );
}
protected void doCleanup() {
System.out.println( "Superclass doCleanup()" );
}
}
儿童课
public class MySubclass extends MyClass {
/**
* Override a couple of the superclass methods to provide a different
* implementation.
*/
@Override
protected void doSetup() {
System.out.println( "MySubclass doSetup()" );
}
@Override
protected void doCleanup() {
System.out.println( "MySubclass doCleanup()" );
}
}
测试赛跑者
public class Runner {
public static void main( String... args ) {
MyClass mySuperclass = new MyClass();
mySuperclass.run(); // calls the superclass method, gets the superclass
// implementation because mySuperclass is an instance
// of MyClass
MyClass child = new MySubclass();
child.run(); // calls the superclass method, gets the child class
// implementation of overridden methods because child is
// an instance of MySubclass
}
}
有关使用此方法的设计模式的示例,请参阅Template method pattern。
答案 2 :(得分:-1)