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

Java 父类可以调用孙子类的方法吗?,java,Java,我在整个父类中有一个main方法,在这个main方法之外,我还有两个其他方法,我将在main方法内部调用它们。这些外部方法中的每一个都调用在中定义的方法,而不是子类,而是孙子类 这就是我真正困惑的地方。在我的大父类中,不是主方法的两个方法采用子类类型的数组。这是因为数组中的每个项都是孙子类的不同类型。我之所以会这样,是因为我在父类中调用的方法没有在子类中定义(它们是在孙子类中定义的),这就是为什么不能调用它们的原因。是否有方法将索引类型转换为数组中for循环中的每个孙子类类型?还是其他方式 抱歉

我在整个父类中有一个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;
    }
}
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);
    }
}

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

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

你为什么不试试?现在怎么办?(请给我们你的代码)为什么不用一个小的代码片段来表达呢?你是一个开发人员,我们是开发人员,所以让我们用我们的术语来谈谈:代码。你为什么不尝试一下呢?现在怎么办?(请给我们您的代码)为什么不用一个小代码片段来表达呢?您是开发人员,我们是开发人员,所以让我们用我们的术语来谈谈:代码。非常感谢!我也很感激你是唯一一个没有说任何粗鲁话的人!非常感谢你!我也很感激你是唯一一个没有说任何粗鲁话的人!