0

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

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

抱歉,如果这是表达这个问题的一种超级混乱的方式。

4

1 回答 1

4

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

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);
    }
}
于 2013-09-10T17:07:53.047 回答