抽象类如何引用而不是对象?
请注意,您不能构造抽象类的对象,但仍可以使用类型为抽象类的对象引用。 当然,它引用的实际对象必须是具体子类的实例:
Account anAccount; // OK anAccount = new Account(); // Error—Account is abstract anAccount = new SavingsAccount(); // OK anAccount = null; // OK
不明白为什么你可以有一个抽象类的对象引用…
当你有一个类型是抽象类的对象引用时,该引用并不意味着“我正在引用一个抽象类”。 相反,它意味着“我正在引用一些实际对象,它是该抽象类的子类。” 这就是为什么你可以让引用引用一个SavingsAccount
,它是一个非抽象类,它从Account
,但你不能让它指向一个new Account()
,因为你无法实际实例化Account
。
请注意,引用本身不是抽象类的实际实例。
希望这可以帮助!
问题是你不能调用抽象成员例程。
当你调用’new’时,你实际上正在调用类的构造函数。
因为您试图调用抽象成员函数,所以会出错。
您可以引用一个抽象类,因为它只是从中派生出来的真实类的蓝图。 有点像接口但有inheritance。
就像您无法实例化接口一样,您无法实例化抽象类。
这当然是多态性的一部分。
抽象类和接口之间的差异非常小,请参阅: 接口与抽象类(通用OO)