代码的运行原理不清楚

img


这个代码明明没有调用他们的构造方法但是他们在构造方法中的值确被调用了不知道为什么

  • 首先,你的父类的构造函数时无参的, 子类继承父类,他的构造函数也是无参的; 这里其实省略了 子类调用父类的构造函数。
  • 子类在初始化时,调用自己的构造函数,进入自己构造函数第一件事情就是 调用父类的构造函数进行初始化【省略的super() 调用】,然后才开始初始化自己的变量。
  • 如下所示:
class A {
    A() {
    }  
}

class B extends A{
     B() {
        super(); // 这里隐含了这一语句,即调用父类的无参构造函数,这里也可以省略。
     }
}

该回答内容部分引用GPT,GPT_Pro更好的解决问题
Java是一种面向对象的编程语言,可以用来开发各种应用程序。每一个Java类都有一个构造函数,它是一个特殊的方法,用来在实例化对象时初始化成员变量和其他信息。构造函数有两种形式:无参数构造函数和带参数构造函数。

如果你看到一个Java类中定义了带参数的构造函数,但是却没有在代码中调用它,这就意味着这个类会有一个默认的无参数构造函数。当Java虚拟机创建这个实例的时候,会默认调用这个无参数的构造函数,然后再将参数传入带参数构造函数中去设定成员变量。

举个例子:

public class Test {
    private String name;
    private int age;

    // 带参数的构造函数
    public Test(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {
        // Test t = new Test("John", 20);

        // 没有调用上面的带参数的构造函数,而是使用默认的无参数构造函数来创建对象
        Test t = new Test();

        t.setName("John");
        t.setAge(20); 
    }

    // 无参数的构造函数
    public Test() {}

    public void setName(String name) {
        this.name = name; 
    } 

    public void setAge(int age) { 
        this.age = age; 
    } 
}

上面这个Test类中定义了带参数的构造函数,但是在main方法中却没有调用这个带参数的构造函数。此时,Java会自动调用无参的构造函数来创建Test对象,然后再将参数传入到带参的构造函数中来初始化成员变量。
如果回答有帮助,望采纳。