Tor*_*tel 2 java inheritance superclass
是否可以强制重写方法来调用超类方法?构造函数总是需要调用它们的超类构造函数.但是我希望在普通方法上强制执行此操作,而不是在它被称为问题时的位置.
例:
public class A {
public void doSth() {
System.out.println("I must appear on console!");
}
}
public class B extends A {
@Override
public void doSth() {
System.out.println("Bla!"); // IDE should mark an error, because supermethod is not called.
}
}
Run Code Online (Sandbox Code Playgroud)
不,那是不可能的.完全取决于调用超类方法的重写方法.
但是,如果要强制执行控制,有一种方法可以执行此操作.
这称为模板方法模式.模板方法是抽象的还是存根(如此处所示)取决于它们是否必须执行某些操作,或者只是允许执行额外的操作.
public class A {
public final void doSth() { // final, preventing override by subclasses
beforeDoSth();
System.out.println("I must appear on console!");
afterDoSth();
}
protected void beforeDoSth() { // protected, since it should never be called directly
// Stub method, to be overridden by subclasses, if needed
}
protected void afterDoSth() {
// Stub method, to be overridden by subclasses, if needed
}
}
public class B extends A {
@Override
protected void afterDoSth() {
System.out.println("Bla!");
}
}
Run Code Online (Sandbox Code Playgroud)
如果你再执行new B().doSth()
,你会得到:
I must appear on console!
Bla!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
824 次 |
最近记录: |