Java中如何给父类初始化

在Java中,当子类实例化时,会自动调用父类的构造函数来初始化父类的数据成员。如果子类没有显示地调用父类的构造函数,那么系统会默认调用父类的无参构造函数。但是如果父类没有无参构造函数,而只有带参数的构造函数,那么子类就需要显式地调用父类的构造函数来初始化父类的数据成员。

显式调用父类构造函数

在子类的构造函数中,使用super()来显式调用父类的构造函数。以下是一个简单的示例:

class Parent {
    private int num;

    public Parent(int num) {
        this.num = num;
    }

    public void display() {
        System.out.println("Number: " + num);
    }
}

class Child extends Parent {
    private String name;

    public Child(int num, String name) {
        super(num); // 显式调用父类构造函数
        this.name = name;
    }

    public void show() {
        System.out.println("Name: " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child(10, "Alice");
        child.display();
        child.show();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

在上面的示例中,Child类继承自Parent类,Child类的构造函数中通过super(num)来显式调用Parent类的带参数构造函数来初始化父类的数据成员。

调用不同的父类构造函数

在Java中,子类构造函数中调用父类构造函数时,可以调用不同的父类构造函数。在使用super()调用父类构造函数时,可以根据需要传递不同的参数。

下面是一个示例,展示了如何在子类构造函数中调用不同的父类构造函数:

class Parent {
    private int num;

    public Parent(int num) {
        this.num = num;
    }

    public void display() {
        System.out.println("Number: " + num);
    }
}

class Child extends Parent {
    private String name;

    public Child(int num, String name) {
        super(num); // 调用父类构造函数
        this.name = name;
    }

    public Child(String name) {
        super(0); // 调用父类构造函数
        this.name = name;
    }

    public void show() {
        System.out.println("Name: " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child1 = new Child(10, "Alice");
        child1.display();
        child1.show();

        Child child2 = new Child("Bob");
        child2.display();
        child2.show();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

在上面的示例中,Child类有两个构造函数,一个是接受两个参数的构造函数,另一个是接受一个参数的构造函数。在构造函数中通过super()来调用不同的父类构造函数。

状态图

下面是一个状态图,展示了子类构造函数中如何给父类初始化的过程:

Parent Child

总结

在Java中,给父类初始化可以通过在子类构造函数中显式调用父类构造函数来实现。通过使用super()来调用父类的构造函数,并根据需要传递参数来初始化父类的数据成员。在实际开发中,需要根据具体的业务需求来选择合适的父类构造函数来初始化父类的数据成员,确保子类对象能够正确地使用父类的数据和方法。