如何访问子类中的方法

时间:2012-05-20 12:39:01

标签: java methods arraylist subclass

我目前正在学习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类的方法和字段,但我怎么能这样做它可以访问它定义为的子类的方法。谢谢你的时间:))

4 个答案:

答案 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();
}