gpt4 book ai didi

java - 父类可以调用孙类的方法吗?

转载 作者:行者123 更新时间:2023-12-01 18:43:55 25 4
gpt4 key购买 nike

我的整个父类中有一个 main 方法,除了该 main 方法之外,我还有两个其他方法将在 main 方法内调用。这些外部方法中的每一个都调用在孙类中而不是子类中定义的方法。

这是我真正感到困惑的地方。在我的大父类中,两个不是主方法的方法采用子类类型的数组。这是因为数组中的每个项目都是孙类的不同类型。我明白了,因为我在父类中调用的方法没有在子类中定义(它们在孙子类中定义),这就是为什么它们不能被调用。有没有办法在数组的 for 循环中将索引强制转换为每个单独的孙子类类型?或者有其他方式吗?

很抱歉,如果用这种方式来表达这个问题是非常令人困惑的。

最佳答案

执行此操作的正常方法是将父类声明为抽象,并声明该方法应该存在。孙子类将提供该方法的一个版本。例如:

public abstract class Doubler {
int a;

public Doubler(int a) {
this.a = a;
}

abstract int modifyResult(int aResult);

int calculate() {
int rv = a * 2;
return modifyResult(rv);
}
}

public class DoublerAndAdder extends Doubler {
int b;

public DoublerAndAdder(int a, int b) {
super(a);
this.b = b;
}

@Override
public int modifyResult(int aResult) {
return aResult + b;
}
}
即使 modifyResult() 被声明为抽象且没有实现,

calculate() 也可以调用 modifyResult()。调用 DoublerAndAdder.calculate() 将运行 Doubler.calculate(),后者将调用 DoublerAndAdder.modifyResult()

如果不能使父类抽象,父类可以提供一个不执行任何操作的方法版本:

public abstract class Doubler {
int a;

public Doubler(int a) {
this.a = a;
}

public int modifyResult(int aResult) {
return aResult;
}

int calculate() {
int rv = a * 2;
return modifyResult(rv);
}
}

关于java - 父类可以调用孙类的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18722470/

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