【问题标题】: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
    }
    

    但只有在确实必须使用具有不同名称和参数的函数时,才应使用这些技术。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多