gpt4 book ai didi

Java - 绕过多态性?

转载 作者:行者123 更新时间:2023-12-02 20:46:31 25 4
gpt4 key购买 nike

假设我有一个这样的类(class):

public class Base
{

public void foo()
{
System.out.println("base foo");
}

public Base()
{
foo();
}
}

我有一个像这样的派生类:

public class Derived extends Base
{
public void foo()
{
System.out.println("derived foo");
}
}

由于多态性,当我创建派生类的实例时,当隐式调用基构造函数时,基构造函数将调用派生方法 foo 而不是基类 foo。有没有办法“强制”基本构造函数调用它自己的 foo?

最佳答案

Is there any way to "force" the base constructor to call its own foo?

否(假设您希望能够覆盖Derived中的foo)唯一情况当您从子类调用 super.whatever() 时,对虚拟方法的调用不会以多态方式执行 - 即使子类覆盖它,也会调用父类(super class)实现。这对于您的情况没有用,因为您想在同一个类中调用实现。

但是您可以使用 template method pattern 的变体(它不一样,但它让人想起它......)以获得您想要的效果

public class Base
{
public void foo()
{
fooImpl();
}

private void fooImpl()
{
System.out.println("base foo");
}

public Base()
{
fooImpl();
}
}

现在 foo() 本身是多态的 - 但如果(在 Base 内)你想要执行“如果不是的话 foo() 会做什么覆盖”,您只需调用 fooImpl() 即可。

关于Java - 绕过多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com