2012-05-20 8 views
2

현재 Java를 배우고 있으며 실제로 뭔가 어려움을 겪고 있습니다. 그래서 서브 클라스 "CD", "Game", "DVD"를 가진 클래스 "Disk"를 가지고 있습니다. 배열 목록에 디스크, 게임 및 cd의 새로운 인스턴스를 만드는 "데이터베이스"클래스가 있습니다. 배열 목록과 같이 초기화된다하위 클래스의 메서드에 액세스하려면 어떻게해야합니까?

disks.add(new Game(1999,"SuperGame!",900,"xbox","ea")); 

내가 사용하는 게임 서브 클래스의 방법 "getConsole"에 접근을 시도하고있다 :

private ArrayList<Disk> disks = new ArrayList(); 

내가 다음 배열에 게임의 인스턴스를 추가 다음 코드는

Disk currentDisk = disks.get(3); 
currentDisk.getConsole(); 

getConsole 메소드가 존재하지 않는다고 말합니다. 문제는 Disk 클래스의 메서드와 필드에만 액세스한다는 것입니다.하지만 정의 된 서브 클래스의 메서드에 액세스 할 수 있도록 어떻게 만들 수 있습니까? 시간 내 주셔서 감사합니다 :)

답변

0

당신은 Game로 다시 캐스팅해야합니다

Game myGame = (Game)disks.get(3); 
0

디스크가 게임의 방법에 대해 알고하지 않습니다, 그것을 사용하기 위해, 당신은 그것을 캐스팅해야합니다 게임으로. 또한 대부분의 경우 게임이 실제로 게임이고 다른 하위 클래스 유형이 아닌지 확인해야합니다.

Disk disk = new Game(); 

(Game)disk.getConsole(); // notice the cast 

편집 : 그것은 getConsole() 때문에

if (disk instanceof Game) 
{ 
    // do things 
} 
4

instanceof를 타입 사용의인지 확인하기 위해 추가 할 것은 단지 Game 서브 클래스로 볼 수 있습니다 분실, 당신은 당신이있어 알고 자바 말할 필요 명시 적으로 일을 테스트하기 때문에,

Disk currentDisk = disks.get(3); 
if (currentDisk instanceof Game) { 
    ((Game)currentDisk).getConsole(); 
} 

이 자바에서 일을 할 수있는 아주 좋은 방법이 아니다하십시오 Game보고, 명시 적 캐스트 하위 클래스의 e 유형.

0

instanceof 연산자를 사용하여 개체가 실제로 "게임"개체인지 확인해야합니다. 그런 다음 게임으로 캐스팅하여 모든 게임 공개 멤버 및 메서드에 액세스 할 수 있습니다.

Disk currentDisk = disks.get(3); 
if (currentDisk instanceof Game) { 
Game game = (Game) currentDisk; 
game.getConsole(); 
} 
관련 문제