重载采用基础 class 并指导扩展 classes 方法实现的方法
To overload a method taking a base class and directing the extending classes method implementation
下面的逻辑是所有三个 classes AppleLeaf、MangoLeaf 和 BananaLeaf extend
叶class。我有一个只接受叶对象的方法。它应该根据 class 类型正确地将我重定向到下面的方法。
但是我收到错误,例如 "The method handleLeaf(AppleLeaf) in the type main is not applicable for the arguments (Leaf)"
public void main(String args[]){
for (Leaf leaf : leafList) {
handleLeaf(leaf);
}
}
private void handleLeaf(AppleLeaf node) {
String colour = leaf.getColour();
System.print.out(colour);
}
private void handleLeaf(MangoLeaf mLeaf) {
Int veins = mLeaf.getVeinCount;
System.print.out(veins);
}
private void handleLeaf(BananaLeaf bLeaf) {
Boolean withered = bLeaf.getTexture();
}
你不能像那样自动向上转换。您要查找的是动态方法绑定,Java 中没有。 Java 是一种编译时链接语言,因此,它不会 compile/run。
这不是它的工作原理。您已经定义了三个方法,none 其中以 Leaf
作为参数。每个都取 Leaf
的子 class,但我们不知道给定参数可能是 Leaf
的哪个子class。
一个解决方法是创建一个委托方法,例如:
private void handleLeaf(Leaf leaf) {
if(leaf instanceof AppleLeaf)
handleLeaf((AppleLeaf)leaf);
else if(leaf instanceof MangoLeaf)
handleLeaf((MangoLeaf)leaf);
...//And so on
}
不过,您可以考虑总体上修改您的逻辑。或许您可以反过来在 Leaf
class 中定义一个抽象方法,并让每个叶类型在其自己的方法定义中处理自己。
下面的逻辑是所有三个 classes AppleLeaf、MangoLeaf 和 BananaLeaf extend 叶class。我有一个只接受叶对象的方法。它应该根据 class 类型正确地将我重定向到下面的方法。 但是我收到错误,例如 "The method handleLeaf(AppleLeaf) in the type main is not applicable for the arguments (Leaf)"
public void main(String args[]){
for (Leaf leaf : leafList) {
handleLeaf(leaf);
}
}
private void handleLeaf(AppleLeaf node) {
String colour = leaf.getColour();
System.print.out(colour);
}
private void handleLeaf(MangoLeaf mLeaf) {
Int veins = mLeaf.getVeinCount;
System.print.out(veins);
}
private void handleLeaf(BananaLeaf bLeaf) {
Boolean withered = bLeaf.getTexture();
}
你不能像那样自动向上转换。您要查找的是动态方法绑定,Java 中没有。 Java 是一种编译时链接语言,因此,它不会 compile/run。
这不是它的工作原理。您已经定义了三个方法,none 其中以 Leaf
作为参数。每个都取 Leaf
的子 class,但我们不知道给定参数可能是 Leaf
的哪个子class。
一个解决方法是创建一个委托方法,例如:
private void handleLeaf(Leaf leaf) {
if(leaf instanceof AppleLeaf)
handleLeaf((AppleLeaf)leaf);
else if(leaf instanceof MangoLeaf)
handleLeaf((MangoLeaf)leaf);
...//And so on
}
不过,您可以考虑总体上修改您的逻辑。或许您可以反过来在 Leaf
class 中定义一个抽象方法,并让每个叶类型在其自己的方法定义中处理自己。