Avi*_*vik 0 java constructor derived
在以下代码中:
import java.io.*;
public class MyClass1
{
MyClass1()
{
System.out.println("base class");
}
public void print()
{
System.out.println("base print");
}
}
class ChildClass extends MyClass1
{
public ChildClass()
{
System.out.println("child class");
}
public void print()
{
System.out.println("child print");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么当我创建ChildClass类型的实例时,基类的构造函数也会被执行?
因为您的子类扩展了基类 - 它是基类的一个实例,并且具有所有相同的字段和变量等.因此,基类也必须实例化.
举一个具体的例子,假设您的基类具有以下内容:
public class Base
{
final private int id;
public Base()
{
this(-1);
}
public Base(int id)
{
this.id = id;
}
public getId()
{
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
保证在构造类时实例化最终变量.您的子类将有一个id字段(即使它不能直接使用子方法访问它),并且由于此字段是私有的,因此无法使用子构造函数对其进行实例化 - 因此必须调用基类构造函数.
请记住,这不仅仅是最终变量的问题,也不是您可能使用的任何特定功能所特有的 - 因为您的子类是基类,需要将其正确地实例化为一个.