为什么我们不能在JAVA中实例化一个抽象类?

san*_*jai 13 java oop inheritance constructor abstract-class

我明白:

  1. 由于抽象类本身没有任何东西,即车辆,这就是为什么我们要创建一个具体实现的对象,如汽车,自行车等.
  2. 在对象链接期间调用Abstract类的构造函数.

  3. 我们永远不能直接创建Abstract类的对象,即使它包含一个Constructor并且所有方法都已实现

为什么?我希望从编译器的角度理解,为什么Java强制这些呢?

谢谢

kev*_*vin 22

抽象类不完整!作者将其标记为抽象,告诉您代码中缺少某些实现.作者完成了一些工作,但你必须自己填写一些内容以使其正常工作.该abstract关键字确保没有人会不小心启动这个不完整的类.

想想修车.有人取下了刹车片,并准备在第二天更换刹车片.现在,为了防止有人意外驾驶这辆车(没有安装制动器),机械师在方向盘上安装了一把锁.这是一种自动防故障措施.


Eli*_*ser 12

这不是技术限制,而是(正如您所指出的)逻辑限制.Java(和许多其他语言)强制执行各种规则不是因为它们不可能破解,而是因为这是语言的有意识部分.


Tay*_*lor 6

火箭男出现了一些机械原因,但这是一个概念上的原因.

抽象类代表一个抽象概念.以你的车辆为例.你不能建造一个不具体的车辆.你可以拥有一套车辆,可以用2004卡罗拉和'98福特护航以及1984 cs36(一种游艇),标志4萤火虫级中档散装运输(带稳定器的那种),你可以单独拿这些中的任何一个并称它们为车辆,但你不能拥有只是车辆的东西,而不能拥有那些或其他特定类型的车辆.

抽象类表示诸如车辆之类的抽象概念.因此,实例化一个的想法是非感性的,因为要实际实例化它,你需要知道你实例化了什么.

  • 谢谢,我猜它更像一条规则,为什么是因为概念设计,因此使编译器强制执行该错误。 (2认同)

Vip*_*rma 5

不能使用 new 运算符实例化抽象类。因为抽象可能有抽象方法,即没有任何主体(或实现)的方法。因为对象不能有抽象方法,JVM 不能分配抽象方法的内存