抽象类如何具有引用而没有对象?

2022-09-04 02:25:34

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

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

不明白为什么你可以有一个对象引用一个抽象类...


答案 1

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

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

希望这有帮助!


答案 2

问题是不能调用抽象成员例程。
当你调用“new”时,你实际上是在调用类的构造函数。
因为您正在尝试调用抽象成员函数,所以会收到错误。

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

这当然是多态性的一部分。
抽象类和接口之间的差异非常小,请参阅:接口与抽象类(通用OO)