我目前正在学习Java,而且我真的在努力学习。所以我有一个类“磁盘”,子类“CD”,“游戏”和“DVD”。我有一个“数据库”类,它在数组列表中创建磁盘,游戏和cd的新实例。数组列表初始化如下:
private ArrayList<Disk> disks = new ArrayList();
然后我将一个Game实例添加到数组中:
disks.add(new Game(1999,"SuperGame!",900,"xbox","ea"));
我正在尝试使用以下代码访问Game子类中的方法“getConsole”:
Disk currentDisk = disks.get(3);
currentDisk.getConsole();
它说getConsole方法不存在。我可以看到问题是它只访问Disk类的方法和字段,但我怎么能这样做它可以访问它定义为的子类的方法。谢谢你的时间:))
答案 0 :(得分:4)
由于getConsole()
仅在Game
子类上可用,因此您需要告诉Java您知道自己正在查看Game
并明确强制转换:
Disk currentDisk = disks.get(3);
if (currentDisk instanceof Game) {
((Game)currentDisk).getConsole();
}
这不是用Java做事的好方法,因为你明确地测试了子类的类型。
答案 1 :(得分:0)
您需要将其转发回Game
:
Game myGame = (Game)disks.get(3);
答案 2 :(得分:0)
磁盘不知道游戏中的方法,为了使用它,你需要把它作为游戏投射。在大多数情况下,您还应该检查以确保它实际上是游戏而不是另一种子类型。
Disk disk = new Game();
(Game)disk.getConsole(); // notice the cast
编辑:忘记添加,以检查它是否属于类型使用instanceof
if (disk instanceof Game)
{
// do things
}
答案 3 :(得分:0)
您必须使用instanceof运算符检查对象是否实际上是“游戏”对象。然后你可以把它投射到游戏并用它来访问所有游戏公众成员和方法。
Disk currentDisk = disks.get(3);
if (currentDisk instanceof Game) {
Game game = (Game) currentDisk;
game.getConsole();
}