抽象类如何引用但不引用对象?

时间:2013-10-28 02:54:40

标签: java class polymorphism abstract

请注意,您不能构造抽象类的对象,但您仍然可以拥有一个对象 类型为抽象类的引用。当然,它所指的实际对象必须是 具体子类的实例:

Account anAccount; // OK
anAccount = new Account(); // Error—Account is abstract
anAccount = new SavingsAccount(); // OK
anAccount = null; // OK

不明白为什么你可以对抽象类进行对象引用...

2 个答案:

答案 0 :(得分:13)

当你有一个类型为抽象类的对象引用时,该引用并不意味着“我正在引用一个抽象类”。相反,它意味着“我正在引用一些实际对象,它是该抽象类的子类。”这就是为什么你可以让引用引用SavingsAccount,这是一个非抽象类,它是Account的子类,但你不能指向new Account(),因为你实际上无法实例化Account

请注意,引用本身不是抽象类的实际实例。

希望这有帮助!

答案 1 :(得分:2)

问题在于你无法调用抽象成员例程 当你调用'new'时,你实际上正在调用类的构造函数 因为您尝试调用抽象成员函数,所以会出错。

可以引用一个抽象类,因为它只是一个从它派生的真实类的蓝图。有点像接口但有继承。
就像您无法实例化接口一样,您无法实例化抽象类。

这当然是polymorphism的一部分 抽象类和接口之间的差异非常小,请参阅:Interface vs Abstract Class (general OO)