【问题标题】:Calling child functions with parent class使用父类调用子函数
【发布时间】:2014-04-18 22:16:21
【问题描述】:
我有一个模拟商店的 java 程序。我有一个带有 3 个子类(游戏、书籍和电影)的产品类。我有一个产品数组,我想根据它是什么特定类型的子类对数组中的每个项目做一些事情。
我遇到的问题是该数组是一个产品数组,因此,其中的项目不能调用子类的函数,即使数组中的每个“产品”实际上是三个子类之一.
我该如何解决这个问题?我知道我可以将一堆抽象函数放入 Product 类中,这些函数在子类中被覆盖,但我想知道是否有更简单的方法。
【问题讨论】:
标签:
java
polymorphism
parent-child
【解决方案1】:
如果你想为每个子类使用不同的函数,你只需要使用“instanceof”操作符并像这样进行类型转换:
例如在循环中的某处:
if(items[i] instanceof Game) {
Game g = (Game)items[i];
g.SomeGameSpecificFunc();
} else if(items[i] instanceof Book) {
//...
}
你也可以通过反射得到一个带有当前对象类名的字符串,但是这样比较慢:
String className = items[i].getClass().toString();
//in Java 7+
switch(className) {
case "Book":
//do something
break;
//etc
}
但只有在确实必须使用具有不同名称和参数的函数时,才应使用这些技术。