2014-09-22 54 views
1

我有兩個類LoanBook & STLoanBook,STLoanBook是LoanBook的擴展。這些都是在同一陣列內:在同一個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"); 

我試圖調用一個函數儲備(),這只是內STLoanBook,當我把它通過一個for循環,它告訴我,儲備()不因爲它正在檢查LoanBook類。我該如何解決這個問題,因爲我已經有了循環檢查類SimpleName(),但它似乎仍然是錯誤的。幫幫我!

回答

2

您可以使用instanceof運營商和casting你在for循環中如

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

您可以通過在LoanBook的方法reserve()解決這個問題,並延長在STLoanBook這種方法,如果它不需要做任何事情這梅索德可以是:

void reverse() { 
    return; 
} 
在LoanBook

0

你需要instanceof和cast:

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

使用instanceof運算符

示例代碼:如果對象是一個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,然後調用其上的保留函數()。

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

另一種解決辦法是寫LoanBook一個空的儲備()函數,並避免使用的instanceof,但它並不像你需要的。