请注意,您不能构造抽象类的对象,但您仍然可以拥有一个对象 类型为抽象类的引用。当然,它所指的实际对象必须是 具体子类的实例:
Account anAccount; // OK
anAccount = new Account(); // Error—Account is abstract
anAccount = new SavingsAccount(); // OK
anAccount = null; // OK
不明白为什么你可以对抽象类进行对象引用...
答案 0 :(得分:13)
当你有一个类型为抽象类的对象引用时,该引用并不意味着“我正在引用一个抽象类”。相反,它意味着“我正在引用一些实际对象,它是该抽象类的子类。”这就是为什么你可以让引用引用SavingsAccount
,这是一个非抽象类,它是Account
的子类,但你不能指向new Account()
,因为你实际上无法实例化Account
。
请注意,引用本身不是抽象类的实际实例。
希望这有帮助!
答案 1 :(得分:2)
问题在于你无法调用抽象成员例程 当你调用'new'时,你实际上正在调用类的构造函数 因为您尝试调用抽象成员函数,所以会出错。
你可以引用一个抽象类,因为它只是一个从它派生的真实类的蓝图。有点像接口但有继承。
就像您无法实例化接口一样,您无法实例化抽象类。
这当然是polymorphism的一部分 抽象类和接口之间的差异非常小,请参阅:Interface vs Abstract Class (general OO)