我创建了4个类: Cd , Dvd , Item 和 Database 。 Cd 和 Dvd 从 Item 扩展。 数据库类存储{em> Items 的ArrayList
。
我坚持在数据库类中创建一个方法,该方法在 Cd 或 Dvd 中调用方法显示。但是我设法显示 Cds 。
如何显示所有项目? E.g。
项目编号= 1
CD项目编号= 2
DVD项目编号= 3
镉
非常感谢。
修改:
Cd 和 Dvd 的显示方法不同。
public void displayAll() {
for (int i = 0; i < items.size(); i++) {
Cd theCd = (Cd) items.get(i);
// Dvd theDVD = (Dvd) items.get(i);
System.out.println("Item Number = " + i);
theCd.display();
// theDvd.display
}
}
我的班级图是:
Class Diagram http://img571.imageshack.us/img571/1460/unledsca.png
答案 0 :(得分:1)
您的public abstract void display();
课程中可能应该有Item
。可以想象Items
能够展示自己是有意义的。然后,您将在CD
和DVD
中实现它(听起来就像您已经拥有的那样)。然后你就不需要垂头丧气了:
public void displayAll()
{
for (int i = 0; i < items.size(); i++) {
Item item = (Item) items.get(i);
System.out.println("Item Number = " + i);
item.display();
}
}
如果您使用支持泛型的JDK版本,请考虑使用ArrayList<Item>
而不是ArrayList
。然后你也可以摆脱Item
演员阵容。
答案 1 :(得分:0)
你应该从列表中获取Item,而不是Cd,然后只调用Item类中声明的方法。如果子类中的方法是重写方法,则会自动调用它们。
编辑:刚检查了你的课程图。方法显示应添加到Item类中,并由子类覆盖。
答案 2 :(得分:0)
您正在寻找instanceof
if (item instanceof Cd)
然而,正如其他人所说的......它可能指向糟糕的课堂设计。为什么你需要知道这种类型是什么?
答案 3 :(得分:0)
不要明确施放;这违背了多态的目的。在display
基类中声明一个抽象的Item
方法,然后在Cd
和Dvd
中覆盖它。
然后你的循环可以是:
List<Item> my_list = new ArrayList<Item>();
...
for (int i = 0; i < items.size(); i++) {
System.out.println("Item number = " + i);
items[i].display();
}
这将始终调用正确的方法。
答案 4 :(得分:0)
for (int i = 0; i < items.size(); i++) {
Item theItem = (Item)items.get(i);
System.out.println("Item Number = " + i);
theItem.display();
}
转换为项目,而不是CD或DVD。确保Item有一个display()方法。 另外,如果您使用的是Java 5或更高版本,请查看generics