我有一个模拟商店的java程序。我有一个包含3个子类(游戏,书籍和电影)的Product类。我有一系列的产品,我想对数组中的每个项目做一些事情,具体取决于它的特定类型的子类。
我遇到的问题是数组是一个Products数组,因此,来自它的项不能调用子类的函数,即使数组中的每个“Product”实际上是三个子类之一
我该如何解决这个问题?我知道我可以将一堆抽象函数放入Product类中,这些函数在子类中被重写,但我想知道是否有更简单的方法来执行此操作。
答案 0 :(得分:0)
如果你想为每个子类使用不同的函数,你只需要使用“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
}
但是,只有当你真的必须使用具有不同名称和参数的函数时,才应该使用这些技术。