在同一arrray Java中调用扩展类函数

在同一arrray Java中调用扩展类函数,java,arrays,methods,Java,Arrays,Methods,我有两个类LoanBook&STLoanBook,STLoanBook是LoanBook的一个扩展。它们都位于同一阵列中: private static final LoanBook[] books = new LoanBook[50]; books[0] = new STLoanBook("B129", "Soil Mechanics", "Engineering"); books[1] = new LoanBook("B238", "Basic Biology", "Science"); b

我有两个类LoanBook&STLoanBook,STLoanBook是LoanBook的一个扩展。它们都位于同一阵列中:

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中的函数reserve(),当我通过for循环调用它时,它告诉我reserve()不存在,因为它正在检查LoanBook类。如何修复这个问题,因为我已经让循环检查了类SimpleName(),但它似乎仍然出错。救命啊

您可以通过在LoanBook中创建方法
reserve()
来解决此问题,如果不需要执行任何操作,则可以在STLoanBook中扩展此方法。此方法可以:

void reverse() {
    return;
}

在借书簿中。

您需要
实例和演员:

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

您可以在for循环中使用
instanceof
运算符和
casting
,例如

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

使用instanceof运算符

示例代码:

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

首先检查对象是否为STLoanBook的实例。 如果是,则将其强制转换为STLoanBook,然后对其调用reserve函数()

另一个解决方案是为LoanBook编写一个空reserve()函数,并避免使用instanceof,但看起来您并不需要它

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