我必须在 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/