Java 父类可以调用孙子类的方法吗?
我在整个父类中有一个main方法,在这个main方法之外,我还有两个其他方法,我将在main方法内部调用它们。这些外部方法中的每一个都调用在中定义的方法,而不是子类,而是孙子类 这就是我真正困惑的地方。在我的大父类中,不是主方法的两个方法采用子类类型的数组。这是因为数组中的每个项都是孙子类的不同类型。我之所以会这样,是因为我在父类中调用的方法没有在子类中定义(它们是在孙子类中定义的),这就是为什么不能调用它们的原因。是否有方法将索引类型转换为数组中for循环中的每个孙子类类型?还是其他方式Java 父类可以调用孙子类的方法吗?,java,Java,我在整个父类中有一个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);
}
}
你为什么不试试?现在怎么办?(请给我们你的代码)为什么不用一个小的代码片段来表达呢?你是一个开发人员,我们是开发人员,所以让我们用我们的术语来谈谈:代码。你为什么不尝试一下呢?现在怎么办?(请给我们您的代码)为什么不用一个小代码片段来表达呢?您是开发人员,我们是开发人员,所以让我们用我们的术语来谈谈:代码。非常感谢!我也很感激你是唯一一个没有说任何粗鲁话的人!非常感谢你!我也很感激你是唯一一个没有说任何粗鲁话的人!