java中的父类和子类

2024-01-08 16:25:06

java中继承父类的子类中的构造方法必须定义吗:

在 Java 中,子类默认会继承父类的构造方法,但是在子类的构造方法中,并不需要显式地定义调用父类的构造方法。如果子类中没有定义构造方法,那么编译器会默认生成一个无参构造方法,并且在该构造方法中会隐式地调用父类的无参构造方法。

然而,如果父类中只定义了有参构造方法,而没有提供无参构造方法,那么子类就必须显式地定义一个构造方法,并在其中使用 super() 关键字调用父类的有参构造方法。

示例代码如下:

class Parent {
    private int value;

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

class Child extends Parent {
    private String name;

    public Child(int value, String name) {
        super(value); // 调用父类的有参构造方法
        this.name = name;
    }
}

在上面的示例中,父类 Parent 定义了一个有参构造方法,子类 Child 在其构造方法中使用 super(value) 调用了父类的有参构造方法来初始化父类的成员变量。这样就确保了子类在创建对象时能够正确地初始化父类的状态。

需要注意的是,如果父类同时定义了无参构造方法和有参构造方法,而子类没有显式地调用父类的构造方法,则编译器会默认调用父类的无参构造方法。如果父类只定义了有参构造方法,而没有提供无参构造方法,那么子类就必须显式地调用父类的有参构造方法。

如果父类只定义了有参构造方法,而没有提供无参构造方法,子类的构造方法中没有调用父类的有参构造方法,会发生什么

如果父类只定义了有参构造方法而没有提供无参构造方法,并且子类的构造方法中没有显式地调用父类的有参构造方法,那么编译器会报错。

这是因为在子类的构造方法中,如果没有显式调用父类的构造方法,编译器会默认插入一行代码 super() 来调用父类的无参构造方法。但是由于父类只定义了有参构造方法,没有提供无参构造方法,编译器找不到可以调用的父类构造方法,就会报错。

为了解决这个问题,你可以在子类的构造方法中使用 super 关键字显式地调用父类的有参构造方法,并传入适当的参数,以确保正确初始化父类的状态。

示例代码如下:

class Parent {
    private int value;
    
    public Parent(int value) {
        this.value = value;
    }
}

class Child extends Parent {
    private String name;

    public Child(int value, String name) {
        super(value); // 显式调用父类的有参构造方法
        this.name = name;
    }
}

在上述示例中,子类 Child 的构造方法中使用 super(value) 来显式地调用了父类 Parent 的有参构造方法,并传入适当的参数。这样就能够正确地初始化父类的状态。

总结:

一个类,不写构造方法会默认给你添个。显式声明或者你自己自定义个带参的就不给你添加默认无参的了,你想要自己显式定义。

1.一个子类,假如继承一个含有无参构造方法或者没有构造方法的父类,那么默认会给子类添个构造方法,并且该构造方法中还会调用父类中的构造方法。??????? (没有给你添,显式就不加

2.如果继承一个只有有参构造方法的类,那么创建对象时肯定要用到父类有参构造方法,super(xx),并且是必须的。

3.如果继承一个含有有参构造方法和无参构造方法的类,子类中可以不显式声明构造方法,默认会添加。??????? 可以显式声明无参构造方法(和情况1一样);也可以自定义有参构造方法。

推荐写法:

定义有参构造函数时,无参的构造函数显式声明出来。这样对于子类更加灵活,子类可以没有显式声明构造方法,也可以根据需要显式声明构造函数,自定义有参构造函数等。

文章来源:https://blog.csdn.net/qq_63053996/article/details/135395950
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。