gpt4 book ai didi

Java - 父类正在调用子类的方法?

转载 作者:行者123 更新时间:2023-12-02 07:51:01 25 4
gpt4 key购买 nike

抱歉,我对编码还很陌生,可能还没有掌握所有术语。希望您仍然能理解我的问题。我想要得到的输出是:

"Cost for Parent is: 77.77"
"Cost for Child is: 33.33"

但是,我得到了这个:

"Cost for Parent is: 33.33"
"Cost for Child is: 33.33"

有人能明白为什么吗?我有下面的代码的简化版本,但保持其背后的逻辑相同......

public class Parent{
public double calculateCost(){
return 77.77;
}

@Override
public String toString(){
return "Cost for Parent is: " + calculateCost();
}
}

public class Child extends Parent{
@Override
public double calculateCost(){
return 33.33;
}

@Override
public String toString(){
return super.toString() + "\nCost for Child is: " + calculateCost();
}

public static void main(String[] args){
Child child1 = new Child();
System.out.println(child1.toString());
}
}

在我看来,Child 类中的 toString() 应该调用 Parent 类中的 toString() (因此,Parent 类中的calculateCost()),然后使用 Child 中的calculateCost() 添加到它。我猜测 super.toString() 中的 super 不适用于它包含的calculateCost()。

另外,我知道我可以通过在 Child 类中编写 toString() 来解决这个问题,如下所示:

    @Override
public String toString(){
return "Cost for Parent is: " + super.calculateCost() + "\nCost for Child is: " + calculateCost();
}

但重点是我不想重复代码,我宁愿添加到我要覆盖的先前 toString() 方法中。请帮助或指导我(不知道我应该谷歌搜索什么......)谢谢!

最佳答案

calculateCostChild 类中被重写。因此,当从 Child 调用 super.toString() 时,super.toString() 中的 calculateCost() code> 将是 ChildcalculateCost

您必须在 Child 类中显式放置 super.calculateCost() 才能调用 ParentcalculateCost.

关于Java - 父类正在调用子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047559/

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