实际对象的类型与对象引用之间的继承关系

时间:2014-04-15 22:57:29

标签: java oop inheritance

例如,我创建了一个这样的对象:

BankAccount b = new SavingsAccount();

现在我想说我想要访问我必须执行的addInterest()类中的方法SavingsAccount((SavingsAccount)b).addInterest();

我的问题是为什么我必须将b投射到SavingsAccount?不是b的实际对象引用已经是SavingsAccount类的实例吗? BankAccount如何影响对象本身?我真的很困惑哪个类真正被实例化,以及BankAccountSavingsAccount如何帮助创建对象b

我感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

如果您有BankAccount类型变量,则其中可能包含SavingsAccount或任何其他类型的BankAccount,并且只有SavingsAccount的方法为{{1} }}。如果您不必进行强制转换,那么您可以编写如下代码:

addInterest()

那不行。为了防止这种情况,编译器必须拒绝调用未在变量类型中定义的方法的程序。

答案 1 :(得分:1)

答案很简单:您将b定义为BankAccount类型的对象,而不是SavingsAccount。如果方法addInterest()仅在SavingsAccount中定义,则无法在BankAccount实例上调用它。

但是,您的SavingsAccount扩展(或实施)BankAccount,因此您可以在BankAccount类型的b中存储对SavingsAccount的引用,因为SavingsAccount也是BankAccount。