我正在为图书馆制作节目;图书馆包含不同的项目,如书籍,视频,期刊等......
我有一个名为item
的类,其中包含库中每个项目的基本方法,我的book
,video
,journal
和所有其他项的类扩展{ {1}}。我想创建一个数组来包含库中的所有项目,以便人们可以搜索特定项目,它将在数组中找到它并显示该项目的信息。
我遇到的问题是,当我创建一个类型为Item
的数组时,我只能调用Item
类的方法而我无法调用我为{{{{ 1 {}在Item
类中或book
类中的book
。
所以我不得不为每种不同类型的journal
使用单独的数组。
有没有办法只有一个数组可以调用每个项目的所有不同类的方法?
您可以在下面看到我的代码;我只附加了数组所在的journal
类的代码,如果您需要查看其他类的代码,请告诉我。我将不胜感激任何帮助。
Items
答案 0 :(得分:2)
您可以检查类型并将其强制转换为该类型,以获取对其他方法的访问权限。
public static void main(String args[]){
for(Item item : itemList){
if(item instanceof Book){
Book book = (Book) item;
book.someBookMethod();
}
}
}
虽然使用instanceof
是considered harmful
更好的设计是使Item
抽象并创建所有子项共有的方法,例如add()
public abstract class Item{
public void add();
public void viewDetails();
}
class Book extends Item{
public void add(){
//fun stuff
}
public void viewDetails(){
//moar serious business logic
}
}
....
public static void main(String args[]){
for(Item item : itemList){
item.add();
}
}