我的整个父类中有一个main方法,在main方法之外我还有另外两个方法,我将在main方法中调用它。这些外部方法中的每一个都调用一个定义的方法,而不是子项,而是孙子类。
这是我真的很困惑的地方。在我的大父类中,不是main方法的两个方法接受一个子类的类型的数组。这是因为数组中的每个项都是孙子类的不同类型。我得到了,因为我在父类中调用的方法没有在子类中定义(它们在孙子类中定义),这就是为什么它们无法被调用。有没有办法在数组的for循环中将索引类型转换为每个单独的孙类类型?或者其他任何方式?
很抱歉,如果这是一个非常令人困惑的方式来表达这个问题。
答案 0 :(得分:4)
执行此操作的常规方法是将父类声明为abstract,并声明该方法应存在。孙子类将提供该方法的一个版本。例如:
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;
}
}
即使calculate()
被声明为抽象且没有实现,也允许 modifyResult()
调用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);
}
}