派生的构造函数

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类型的实例时,基类的构造函数也会被执行?

And*_*yle 5

因为您的子类扩展了基类 - 它是基类的一个实例,并且具有所有相同的字段和变量等.因此,基类也必须实例化.

举一个具体的例子,假设您的基类具有以下内容:

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字段(即使它不能直接使用子方法访问它),并且由于此字段是私有的,因此无法使用子构造函数对其进行实例化 - 因此必须调用基类构造函数.

请记住,这不仅仅是最终变量的问题,也不是您可能使用的任何特定功能所特有的 - 因为您的子类基类,需要将其正确地实例化为一个.