下面程序运行结果
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时没有添加无参构造方法,那么编译器会自动添加无参构造方法;
但是如果编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法!
所以,如果需要使用无参构造方法,一定要在类里面添加