可以说我有这样一个类:
public class Base
{
public void foo()
{
System.out.println("base foo");
}
public Base()
{
foo();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的派生类:
public class Derived extends Base
{
public void foo()
{
System.out.println("derived foo");
}
}
Run Code Online (Sandbox Code Playgroud)
由于多态性,当我创建派生类的实例时,当基本构造函数被隐式调用时,基本构造函数将调用派生方法foo而不是基本foo.有没有办法"强制"基础构造函数调用自己的foo?
有没有办法"强制"基础构造函数调用自己的foo?
否(假设你希望能够覆盖foo中Derived)的仅在其中一个虚拟方法的调用将不被执行的多态是当你调用情况super.whatever()从一个子类-这将调用父类的实现,即使子类覆盖它.这在你的情况下没用,因为你想在同一个类中调用实现.
但是,您可以使用模板方法模式的变体(它不一样,但它让人想起它......)来获得您想要的效果.
public class Base
{
public void foo()
{
fooImpl();
}
private void fooImpl()
{
System.out.println("base foo");
}
public Base()
{
fooImpl();
}
}
Run Code Online (Sandbox Code Playgroud)
现在foo()它本身就像正常一样多态 - 但是如果(在Base之内)你想要执行" foo()如果它没有被覆盖会怎么做"你可以调用fooImpl().
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |