我必须在java的作业中使用Polymorphism和ArrayList,但我需要帮助。如果有人能帮助我,我真的很感激。我无法从ArrayLis访问我的子类方法。
所以我有一个超类
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。它只显示了超类方法。
答案 0 :(得分:1)
如果您希望每个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
或其他任何地方调用它。覆盖方法涉及到这一点。
实际上,您可能不希望将其限制为标准输出。所以你可以通过一些东西来告诉它你想要的信息去哪里。
或许更好,您可以在toString()
及其子类中覆盖Table
,沿着上面的行(但构建String
而不是打印它)。但这取决于你将如何使用这些类。
还有一点需要注意:如果这是一项任务,你可能会因为命名约定的不良风格而删除标记。确保您的实例字段的名称以小写字母开头,而不是大写字母。