2014-05-24 3 views
-1

부모 클래스를 배열로 만들지 만 동일한 배열을 통해 내 자식 클래스의 메서드를 사용할 수 없습니다. 하나의 배열 만 만들 수 있지만 두 클래스의 모든 메서드를 사용할 수 있어야합니다.부모 클래스 배열에서 자식 클래스의 메서드를 가져올 수 없습니다.

public static void main (String args[]) 
Book[] bk = new Book[5]; 

class Book{ 

    private String title; 

    public String getTitle(){ 
    return title;} 
//rest of code for class 
} 

class EBook extends Book { 

    private String website; 

    public EBook (String title, String website)//more the just these two but you get the idea 
    { 
     super(title); 
     setWebsite(website);} 

    public String getWebsite(){ 
     return website;} 
//rest of code for class 
} 

메인 메소드에 bk.getWebsite와 같이 입력하면 Eclipse에서 오류가 발생합니다. 먼저 Book 클래스에서 메서드를 만들어야한다고합니다. 다른 배열을 만드는 것 외에이 문제를 해결하기 위해 할 수있는 일이 있습니까, 아니면 유일한 옵션입니까?

+0

* 당신을주고 무엇 * 오류 클래스에 대한 자세한 정보를 찾을 수 있습니까? 적어도 4 개 (모든 구문)를 볼 수 있습니다. – Makoto

+0

'Book '타입의 배열을 만들었을 때 왜'EBook'의 메소드를 사용할 수 없는지 묻고 있습니까? –

답변

0

도서에 구성 요소 문자열이있는 생성자가 없습니다. 이 같은 유형을 확인하는 것이 최적이라고

if (bk[i] instanceof EBook) { 
    String website=((EBook)bk[i]).getWebsite(); 
} 

참고 : 캐스트를 추가 할 필요가 서브 클래스에 특정 메서드를 호출하기 위해

1

. 기본 클래스에 메서드를 넣고 하위 클래스에서 재정의를 호출하거나 이중 디스패치 (예 : 방문자 패턴을 통해)를 사용하는 것이 좋습니다.

0

EBook.getWebsite()를 호출하려는 Book.getWebsite()를 호출하려고합니다. 이것을하기 위해서는 먼저 전자 책으로 캐스팅해야합니다.

0

아마도 getWebsite() 메소드가 상위 Book 클래스에 정의되지 않았기 때문에 오류가 발생합니다.

부모가 하위 메서드를 호출 할 수있게하려면 가능한 경우 Book 클래스를 추상 클래스로 간주하고 getWebsite() 추상 메서드를 정의하고 Ebook에 getWebsite 메서드를 구현합니다.

이제 Ebook 구현이 포함 된 Book 인스턴스가 있으면 Book 인스턴스를 통해 Ebook 클래스에 구현 된 getWebsite 메소드를 호출 할 수 있습니다.

당신은 추상 방법과 여기에 Oracle docs Abstract

관련 문제