gpt4 book ai didi

java - 为什么不能用new关键字在Java中初始化抽象类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:16 26 4
gpt4 key购买 nike

我在某处读到我们不能初始化接口(interface),例如:

interface MyInterface{};

而下面的代码肯定是非法的:

MyInterface m = new MyInterface();

我记得我读过的文字说:因为 new 关键字用于为类成员分配内存;所以在接口(interface)的情况下,我们只有抽象函数,所以没有什么可以在接口(interface)中分配;因此,禁止初始化接口(interface)。

好的,这对我来说很有意义。

但是在抽象类的情况下,我们可以声明和定义抽象函数、非抽象函数以及普通变量;那么为什么我们也不允许初始化抽象类呢?因此,我想知道抽象类中的变量(如果有)何时以及如何分配内存?

最佳答案

没有对象永远是“只是”抽象类的实例——它始终是具体 类的实例。否则,您可以调用抽象方法...并且不会调用任何实现。

抽象类中变量的分配方式与任何其他类的变量分配方式相同,这些类恰好是正在初始化的实际类的父类(super class) - 它们“与”来自层次结构中的其他类,基本上。

编辑:澄清一下,这是一个概念限制,也是一个实现限制。抽象类通常包含抽象方法,这就是将其抽象化的原因。抽象方法的要点是允许调用者在编译时检查该方法是否存在,即使抽象类不提供实现。 VM 通过防止“只是”抽象类的实例化来确保一个实现。

现在,即使没有任何抽象方法,抽象类也可以用于防止实例化 - 基本上,抽象类的基本要点是它不能 被直接实例化;只能实例化具体的子类。

关于java - 为什么不能用new关键字在Java中初始化抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com