[英]How to call a subclass method from superclass?
Java新手在这里。
Banana and Apple extend Fruit
( Fruit
也可能是一个抽象的类,因为没有水果将永远定形)。
Banana
和Apple
都有一个(完全不同的) toString()
方法。
一个方法 - 让我们称之为processFruit(Fruit fruit)
- 接受Fruit
作为参数,然后调用实际Fruit
收到的toString()
方法(意思是香蕉或苹果),用于记录目的。 我该怎么做呢?
我想做fruit.toString()并让它根据果实的实际运行Apple.toString()或Banana.toString()方法。
我宁愿做的事情(因为有很多水果,不仅仅是苹果和香蕉):
processFruit
方法, processFruit(Banana banana)
和processFruit(Apple apple)
,因为代码完全相同 toString()
方法 必须有另一种方式,但我看不到它。
我想做fruit.toString()并让它根据果实的实际运行Apple.toString()或Banana.toString()方法。
这正是自动发生的事情,只要你真的重写现有的无参数toString()
方法。 这就是方法覆盖的工作方式。
如果你想为toString()
(在Object
声明toString()
之外的方法执行此操作,则需要在Fruit
创建一个抽象方法,然后在每个子类中实现它。 然后,您可以在任何Fruit
实例上调用它,并调用正确的实现。
完整示例:
import java.util.*;
abstract class Fruit {
public abstract String getColor();
}
class Banana extends Fruit {
@Override public String getColor() {
return "yellow";
}
}
class Apple extends Fruit {
@Override public String getColor() {
return "green";
}
}
public class Test {
public static void main(String[] args) {
List<Fruit> list = new ArrayList<Fruit>();
list.add(new Banana());
list.add(new Apple());
for (Fruit fruit : list) {
System.out.println(fruit.getColor());
}
}
}
只需调用fruit.toString()
。 如果水果是香蕉,那么将调用香蕉的toString()
方法。 如果它是Apple,那么将调用Apple的toString()
方法。 这就是多态性的全部意义所在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.