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

时间:2013-09-10 15:04:50

标签: java

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

这是我真的很困惑的地方。在我的大父类中,不是main方法的两个方法接受一个子类的类型的数组。这是因为数组中的每个项都是孙子类的不同类型。我得到了,因为我在父类中调用的方法没有在子类中定义(它们在孙子类中定义),这就是为什么它们无法被调用。有没有办法在数组的for循环中将索引类型转换为每个单独的孙类类型?或者其他任何方式?

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

1 个答案:

答案 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);
    }
}