2014-09-22 2 views
1

두 가지 클래스가 있습니다. LoanBook & STLoanBook, STLoanBook은 LoanBook의 확장입니다.() 나는 for 루프를 통해 호출 할 때, 단지 STLoanBook 내에같은 arrray의 확장 클래스 함수를 호출합니다. Java

private static final LoanBook[] books = new LoanBook[50]; 
books[0] = new STLoanBook("B129", "Soil Mechanics", "Engineering"); 
books[1] = new LoanBook("B238", "Basic Biology", "Science"); 
books[2] = new LoanBook("B563", "Company Law", "Business"); 
books[3] = new STLoanBook("B342", "Cost Accounting", "Business"); 
books[4] = new LoanBook("B754", "Robotics", "Engineering"); 

내가 함수 예약을 (호출하려고이), 그것은 나에게 그 보유를 알 수 없습니다 :이 같은 배열 안에 모두 LoanBook 클래스를 검사하면서 존재합니다. 루프를 이미 SimpleName() 클래스를 검사하고 있으므로이 문제를 해결할 수 있지만 여전히 오류가있는 것 같습니다. 도움!

답변

0

이 메도 될 수 LoanBook의 방법 reserve()를 만들어이 문제를 해결하고 아무것도 할 필요가없는 경우 STLoanBook에서이 방법을 확장 할 수 LoanBook에서

void reverse() { 
    return; 
} 

합니다. 당신은 예를 들어, 루프에 대한 귀하의 내부 instanceof 연산자와 casting을 사용할 수 있습니다

for(book : books) { 
    if(book instanceof STLoanBook) { 
     ((STLoanBook)book).reserve(); 
    } 
} 
0

당신은 instanceof 및 캐스트 필요

for (LoanBook book : books) { 
     if (book instanceof STLoanBook) { 
      ((STLoanBook)book).reserve(); 
     } 
    } 
0

사용 instanceof 연산자

샘플 코드 : 개체의 인스턴스의 STLoanBook 경우

A[] books = new A[10]; 
    books[0] = new A(); 
    books[1] = new B(); 
    books[2] = new B(); 
    books[3] = new A(); 

    for (A a:books) { 
     if (a instanceof B) { 
      ((B) a).reserve(); 
     } 
    } 
0

먼저 확인하시기 바랍니다. 그렇다면 STLoanBook에 캐스팅 한 다음에 reserve 함수()를 호출하십시오.

for (LoanBook book : books) { 
    if (book instanceof STLoanBook) { 
     ((STLoanBook)book).reserve(); 
    } 
} 

또 다른 해결책은 LoanBook에 대해 비어있는 reserve() 함수를 작성하고 instanceof를 사용하지 않는 것입니다.하지만 필요하지는 않습니다.

관련 문제