java - 尝试在java中使用多态性和ArrayList

标签 java arraylist polymorphism

我必须在 java 作业中使用多态性和 ArrayList,但我需要帮助。如果有人能帮助我,我将非常感激。我无法从 ArrayLis 访问我的子类方法。

所以我有一个父类(super class)

    public class Table{
    private int TotalAmount;
    //setters and getters
    }

我有两个子类

    public class TableFidelity extends Table{
    private int Points;
    //setters and getters
    }


    public class TableCompany extends Table{
    private int NumberOfTimesServed;
    //setters and getters
    }

我必须在同一个 ArrayList 中使用我的两个子类

    public static void main(String[] args){
    Table table=new Table();
    ArrayList<Table> Tables=new ArrayList<Table>();
    Table tablefidelity =new TableFidelity ();
    Table tablecompany =new TableCompany ();
    Tables.add(tablefidelity);
    Tables.add(tablecompany);
    System.out.println(Tables.get(0).getTotalAmount());
    //I can get the total Amount from the superclass
    System.out.println(Tables.get(0).getPoints());
    //but I can't do this
    System.out.println(Tables.get(1).NumberOfTimesServed());
    //or this 
    }

当我按 时,Netbeans 不显示 getPoints 或 NumberOfTimesServed。它仅显示父类(super class)方法。

最佳答案

如果您希望每个 Table 打印有关其包含内容的信息,那么最好在 Table 类上定义一个方法来去做。然后,您可以在子类中重写它,以打印这些类生成的额外信息。

在最简单的层面上,你会拥有

class Table {
  ....
  public void printInfo() {
    System.out.println(totalAmount);
  }
}

然后

class TableFidelity extends Table {
  ....
  @Override
  public void printInfo() {
    super.printInfo();
    System.out.println(Points);
  }
}

等等。这就是工作中的多态性:调用 printInfo() 的类不需要知道它是在 Table 还是 TableFidelity 上调用它管他呢。重写的方法处理这个问题。

实际上,您可能不希望将其限制为标准输出。因此,您可以传递一些内容来告诉它您想要将信息发送到何处。

也许更好的是,您可以按照上面的方法重写 Table 及其子类中的 toString() (但构造一个 String而不是打印它)。但这具体取决于您将如何使用这些类。

还有一点要注意:如果这是一项作业,您可能会因为命名约定的不良样式而被标记。确保您的实例字段的名称以小写字母开头,而不是大写字母。

关于java - 尝试在java中使用多态性和ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508849/

相关文章:

c++ - 使用基本指针迭代 std::map 的一种派生类型

Java:父类(super class)中私有(private)变量的初始化

java - 使用JDBC和JWT实现Spring OAuth2,并使用基于XML的配置来自定义现有的授权流

java - 复杂 Hashmap ArrayList 生成器

ArrayList 中的 Java 空元素

java - 向 ArrayList 添加元素时出现 NullPointerException

java - 我希望我的 Android 应用程序有一个简单的表单,可以将信息发送到我的 Gmail

java - 如何使用 Java 中的 Collectors 聚合多个字段

c++ 多态性 ((X*)y)->foo() vs ((X)*y).foo()

c++ - 具有选择排序算法的虚方法函数