如果它不是 Oracle 文档中所述的类的成员,我们称它为什么构造函数:http: //docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
6 回答
我认为为了方便起见,“成员”一词被定义为排除构造函数。构造函数,即使是公共的,也不会被继承;成员是继承的(除非它们是静态的和/或私有的)。在谈论继承规则时总是不得不说“除了构造函数之外的成员”会很尴尬。
构造函数、静态初始化程序和实例初始化程序不是成员,因此不会被继承。
只需将构造函数称为“构造函数”。
它是每个类都有的特殊方法,在创建对象后调用。在JVM中使用invokespecial
so调用它,让我们称之为special
方法吗?
而且由于 Java 中只有 1 个特殊方法 - 他们都称它为“构造函数”
所有文档都在说构造函数默认情况下不被继承。由于构造函数是在内存堆中构造对象时调用的方法,所以一旦创建了继承自超类的子类,默认情况下不会调用超类的构造函数。
例如,如果你有一个类Vehicle
和一个子类Car
,假设Vehicle
构造函数如下:
public Vehicle(String vehName) {
this.vehName = vehName;
}
然后,即使您的类Car
继承自 class Vehicle
,vehName
成员(字段)也不会像上面的构造函数那样设置。
所以你需要做这样的事情:
public Car(String vehName) {
super(vehName);
}
希望有帮助
在 Java 中,类主体(大括号之间的区域)可以包含以下关键项:(1)字段(2)方法(3)其他类(嵌套类)(4)构造函数(5)初始化器
从特定类创建的对象应采用类似于创建它的蓝图(类)的形状。现在,如果您查看可以包含在类主体中的项,则只有项 (1) 到 (3) 有助于确定可以从特定类定义中创建哪种对象。
构造函数和初始化器只在对象的实际创建中起作用(例如,已经定义的字段的初始化),但不决定该对象应该携带什么形状/状态,以及它将显示什么行为。
出于这个原因,对我来说,将项目 (1) 称为 (3) 类成员是有意义的(即类成员是类主体中的那些项目,它们确定从类创建的对象的外观和行为方式);而构造函数和初始化器不是成员,因为它们在类定义中的缺失不会影响类的状态和行为。
因此,只有类成员可以被继承,因为继承背后的重点是启用子类重用其超类的状态和行为。
构造函数是类中的一种方法,用于创建该类的新实例。成为班级成员仅意味着所讨论的项目在班级中。
构造函数是一个名称与类相同的方法。它用于初始化类的对象。它隐含在行动中。参数构造函数用不同的值初始化对象。