为什么 MyClass 中的默认构造函数调用 super 即 Object class
why does the default constructor in MyClass calls super i.e of Object class
我一直在使用 java 并学习我有一个关于 class 中的默认构造函数的问题。 Why does it call super (constructor of Object class.I know it does constructor chaining)?. For what reasons it is required
?.如果我像这样定义 class
MyClass
{
public MyClass()
{
}
}
编译器在构造函数中添加了super。
public MyClass()
{
super();
}
P.S 我试过谷歌搜索并阅读了 Oracle 文档,但找不到答案。为什么?
谢谢你的时间。
每个构造函数都必须调用相同 class 的不同构造函数或其直接父级 class 的构造函数。如果您不显式调用它,则会隐式添加对 super class 构造函数的调用。
由于 class 的实例继承了其祖先的状态,它必须通过调用其祖先的构造函数来初始化它。
在你的例子中,你的 MyClass
是 Object
的直接子 class,所以你的构造函数必须调用 Object
.[=13= 的构造函数]
A class 始终是 class 的链,并且总是以 Object 结尾(其中 Object 是唯一的例外;它没有超级 class)。
如果创建了一个新实例,那么链中的所有 classes 都必须初始化,否则它们的状态将是未定义的。这也适用于似乎不需要初始化的classes(比如Object)。
初始化部分是隐式完成的(变量获得默认值),另一部分是通过始终在 class.
中调用构造函数来完成的
Why does it call super (constructor of Object class.I know it does
constructor chaining)?. For what reasons it is required ?
考虑这个例子:
class A {
protected String s;
A () {
this.s = "hello";
}
}
class B extends A {
public String get() {
return s;// s is inherited from A
}
}
// A's default constructor is invoked here
System.out.println(new B().get());// prints hello
现在可以说 java 不在构造函数中包含 super()
。
// A's default constructor is not invoked here
System.out.println(new B().get());// prints null
它将 null 作为 class 类型的默认值。由于 B
的新实例未调用 A 的构造函数,因此未初始化 A
的实例变量。
我一直在使用 java 并学习我有一个关于 class 中的默认构造函数的问题。 Why does it call super (constructor of Object class.I know it does constructor chaining)?. For what reasons it is required
?.如果我像这样定义 class
MyClass
{
public MyClass()
{
}
}
编译器在构造函数中添加了super。
public MyClass()
{
super();
}
P.S 我试过谷歌搜索并阅读了 Oracle 文档,但找不到答案。为什么? 谢谢你的时间。
每个构造函数都必须调用相同 class 的不同构造函数或其直接父级 class 的构造函数。如果您不显式调用它,则会隐式添加对 super class 构造函数的调用。
由于 class 的实例继承了其祖先的状态,它必须通过调用其祖先的构造函数来初始化它。
在你的例子中,你的 MyClass
是 Object
的直接子 class,所以你的构造函数必须调用 Object
.[=13= 的构造函数]
A class 始终是 class 的链,并且总是以 Object 结尾(其中 Object 是唯一的例外;它没有超级 class)。
如果创建了一个新实例,那么链中的所有 classes 都必须初始化,否则它们的状态将是未定义的。这也适用于似乎不需要初始化的classes(比如Object)。
初始化部分是隐式完成的(变量获得默认值),另一部分是通过始终在 class.
中调用构造函数来完成的Why does it call super (constructor of Object class.I know it does constructor chaining)?. For what reasons it is required ?
考虑这个例子:
class A {
protected String s;
A () {
this.s = "hello";
}
}
class B extends A {
public String get() {
return s;// s is inherited from A
}
}
// A's default constructor is invoked here
System.out.println(new B().get());// prints hello
现在可以说 java 不在构造函数中包含 super()
。
// A's default constructor is not invoked here
System.out.println(new B().get());// prints null
它将 null 作为 class 类型的默认值。由于 B
的新实例未调用 A 的构造函数,因此未初始化 A
的实例变量。