有关java默认构造 笔记

本文深入探讨Java构造方法的定义及使用规范,强调当定义了有参构造方法时系统默认无参构造方法不再自动提供,需显式声明。并举例说明子类继承父类时构造方法的调用规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面程序运行结果

public class A {
    public A(int num) {
        System.out.println("A的有参构造方法"+num);
    }
    public static void main(String[] args) {
        B b=new B(10);
    }
}
class B extends A{
    public B(int num) {
        System.out.println("B的有参构造方法"+num);
    }
}

A. B的有参构造方法

B. A的有参构造方法
B的有参构造方法

C. B的有参构造方法
A的有参构造方法

D. 编译出错

答案:D

解析:
1.子类继承父类的时候会自动继承父类的默认构造函数(也就是继承那个无参数的构造函数)。

2.无参构造函数是所有构成函数的父类,如果没有写那个默认的不带参数的构造函数的话,继承的时候子类就会报错,因为系统不知道要不继承哪个构造函数,必须明确的使用super()关键字来描述。所以一般为了避免这种错误的发生,在有带有多个构造函数的类里面都会写一个不带参数的构造函数。

每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的构造函数来构建(new)时,此时编译器才会报错,因为找不到这个无参的构造函数。也就是说当一个类你没有给他构造函数,则编译器会自动补上一个无参的,若有的话就不会,你需要显示将此无参的构造函数写出来。

简单的来说B继承A,在实例化B时得先调用A的构造函数,而A只有带参数的构造函数,所以编译不能通过。

public class A {
	public A() {
        System.out.println("A的无参构造方法");
    }
    public A(int num) {
        System.out.println("A的有参构造方法"+num);
    }
    public static void main(String[] args) {
        B b=new B(10);
    }
}
class B extends A{
    public B(int num) {
        System.out.println("B的有参构造方法"+num);
    }
}
//通过编译

下列关于构造方法定义的描述中,错误的是( )
A. 方法名与类名相同
B. 在方法名的前面没有返回值类型的声明
C. 当定义了有参构造方法,系统默认的无参构造方法依然存在
D. 在方法中不能使用return语句返回一个值
答案:C
解析:
如果编写一个javaBean时没有添加无参构造方法,那么编译器会自动添加无参构造方法;
但是如果编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法!
所以,如果需要使用无参构造方法,一定要在类里面添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值