如果java中的构造函数不是类的成员,那么它是什么?

如果java中的构造函数不是类的成员,那么它是什么?,java,constructor,Java,Constructor,如果构造函数不是Oracle文档中所述的类的成员,那么我们称它为什么呢:我认为术语“成员”的定义是为了方便起见排除构造函数。构造函数,即使是公共的,也不会被继承;成员是继承的(除非它们是静态和/或私有的)。在谈到继承规则时,总是要说“除构造函数之外的成员”,这会很尴尬 从: 构造函数、静态初始值设定项和实例初始值设定项不是成员,因此不会被继承 只需将构造函数称为“构造函数”。这是每个类都有的一个特殊方法,在创建对象后调用。在JVM中,它是使用invokespecial调用的,那么,让我们把它称为

如果构造函数不是Oracle文档中所述的类的成员,那么我们称它为什么呢:

我认为术语“成员”的定义是为了方便起见排除构造函数。构造函数,即使是公共的,也不会被继承;成员是继承的(除非它们是静态和/或私有的)。在谈到继承规则时,总是要说“除构造函数之外的成员”,这会很尴尬

从:

构造函数、静态初始值设定项和实例初始值设定项不是成员,因此不会被继承


只需将构造函数称为“构造函数”。

这是每个类都有的一个特殊方法,在创建对象后调用。在JVM中,它是使用
invokespecial
调用的,那么,让我们把它称为
special
方法吧


由于Java中只有一个特殊的方法——它们都称之为“构造函数”

文档所说的是,默认情况下,构造函数不会被继承。由于构造函数是在内存堆中构建对象时调用的方法,因此一旦创建了从超类继承的子类,默认情况下不会调用超类的构造函数

例如,如果您有一个类
Vehicle
和一个子类
Car
,则假定
Vehicle
构造函数如下所示:

public Vehicle(String vehName) {
    this.vehName = vehName;
}
然后,即使您的class
Car
继承自class
Vehicle
,也不会像上面的构造函数那样设置
vehName
成员(字段)

因此,您需要执行以下操作:

public Car(String vehName) {
    super(vehName);
}

希望有帮助

构造函数是一个类中的方法,用于创建该类的新实例。
作为类的成员只意味着所讨论的项在类中。

构造函数是一个名称与类相同的方法。它用于初始化类的对象。它隐含在行动中。参数化构造函数使用不同的值初始化对象。

在Java中,类主体(大括号之间的区域)可以包含以下关键项:(1)字段(2)方法(3)其他类(嵌套类)(4)构造函数(5)初始化器

从特定类创建的对象的形状应与创建它的蓝图(类)相似。现在,如果查看可以包含在类主体中的项,则只有项(1)到(3)有助于确定可以从特定类定义创建哪种类型的对象

构造函数和初始值设定项仅在对象的实际创建中起作用(例如,已定义字段的初始化),但不确定对象应具有什么形状/状态以及将显示什么行为

因此,对我来说,调用项(1)到(3)类成员是有意义的(即类成员是类主体中确定从类创建的对象的外观和行为的项);而构造函数和初始值设定项不是成员,因为它们在类定义中的缺失不会影响类的状态和行为


因此,只有类成员才能被继承,因为继承背后的全部要点是启用子类重用状态及其超类的行为。

仅将其称为“构造函数”有什么错?看到了吗?任何构造非该类成员的类的方法都是工厂,对吗?@Saher???构造函数不是成员,因此它们不会被继承subclasses@Saher不,从技术上讲,你不能称它为班级成员。原因是哲学上的,你不能在它里面创造一些东西。因为从技术上讲,它在创建../chicken egg问题之前是不存在的?还要注意,与常规方法不同,构造函数没有返回类型这不是OP所要求的构造函数不是方法。请参阅:“构造函数类似于方法,但不能通过方法调用直接调用;它们用于初始化新的类实例。”构造函数不创建类的新实例。构造函数是一种特殊方法,用于设置(初始化)使用
new
运算符创建的对象。构造函数不是方法。来自:“构造函数类似于方法,但不能通过方法调用直接调用;它们用于初始化新的类实例。”@TedHopp普通的方法调用转换为
invokevirtual
invokestatic
操作码。“注意,使用invokespecial指令调用的方法总是将其作为其第一个参数传递给被调用的方法。通常,它是在局部变量0中接收的。”-来自JVM规范。“方法”一词在JLS中具有非常特定的技术含义。没有理由混淆Java语言术语和Java虚拟机术语。JLS清楚地表明,构造函数和方法是不同的东西。将一个c'tor称为“特殊方法”只会模糊JLS所做努力的区别。c'tor不是“特殊方法”(JLS中未出现该术语);这是一个托尔。换句话说:编译器将c'tor转换为
方法,但Java语言c'tor和JVM
方法是不同的。我很惊讶看到这么多答案说构造函数是方法或一种特殊的方法,当语言规范千方百计地说它们不是时。再清楚不过了。有趣的是人们根本不在乎。我想人们都是这样的。他们使用自己的定义,因为他们是对的,而语言设计者是错的感谢@TedHopp的大量引用帮助澄清。@RayToal我几乎不相信“官方文档”-我一再证明文档是由编写代码的人以外的其他人更新的。几乎总是这样。在后台查看代码总是很好的。构造函数不是meth