例如,我创建了一个这样的对象:
BankAccount b = new SavingsAccount();
现在我想说我想要访问我必须执行的addInterest()
类中的方法SavingsAccount
:((SavingsAccount)b).addInterest();
我的问题是为什么我必须将b
投射到SavingsAccount?不是b
的实际对象引用已经是SavingsAccount
类的实例吗? BankAccount
如何影响对象本身?我真的很困惑哪个类真正被实例化,以及BankAccount
和SavingsAccount
如何帮助创建对象b
。
我感谢任何帮助。谢谢。
答案 0 :(得分:3)
如果您有BankAccount
类型变量,则其中可能包含SavingsAccount
或任何其他类型的BankAccount
,并且只有SavingsAccount
的方法为{{1} }}。如果您不必进行强制转换,那么您可以编写如下代码:
addInterest()
那不行。为了防止这种情况,编译器必须拒绝调用未在变量类型中定义的方法的程序。
答案 1 :(得分:1)
答案很简单:您将b定义为BankAccount类型的对象,而不是SavingsAccount。如果方法addInterest()仅在SavingsAccount中定义,则无法在BankAccount实例上调用它。
但是,您的SavingsAccount扩展(或实施)BankAccount,因此您可以在BankAccount类型的b中存储对SavingsAccount的引用,因为SavingsAccount也是BankAccount。