这篇文章总结了Java使用构造函数中最常遇到的五个问题!
1 为什么调用子类的构造方法的时候,默认会调用父类的构造方法
看下面这个简单的例子:
package cc; public class Sub extends Super { public Sub() { System.out.println("Sub"); } public static void main(String[] args) { Sub sub = new Sub(); } } class Super { public Super() { System.out.println("Super"); } }
Paste_Image.png
当继承自一个类的时候,构造方法就会首先调用super()方法。如果没有显式的写这个语句,那么编译器就会自动插入这个语句。这就是为什么我们上面的那个例子程序会先调用super的构造方法。 但要切记,** 虽然调用了父类的构造方法,但只创建了一个对象也就是子对象。** 之所以要调用父类的构造方法,是因为super类可能需要构造函数来初始化一些私有的成员变量。 编译器自动插入super构造方法后,子类的构造函数就会像下面这样:
public Sub(){ super(); System.out.println("Sub"); }
2 常见错误:Implicit super constructor is undefined for default constructor. Must define an explicit constructor
Implicit super constructor is undefined for default constructor. Must define an explicit constructor
这个错误是很多开发者经常遇到的错误,错误原因就是找不到超类中的默认构造函数。
看下面的代码:
package cc; public class Sub extends Super { public Sub(String s) { } public static void main(String[] args) { Sub sub = new Sub(); } } cla