关于子类与父类的构造器的小事情一直不是很了解,今天专门抽出空写几行代码,亲自搞清楚,这样印象比较深刻吧.
首先,构造器是针对类来讲的.
1.任意一个只继承java.lang类的类.不指定构造器将被由系统自动生成无参的构造器.
比如:
public class Animals(){
}
测试类:
public static void main (String[] args){
Animals cat = new Animals();
}
.
.
2.子类的实例化中,会先执行父类无参构造方法,再执行自己的
public class Animals(){
System.out.println("Animals的构造方法被执行了");
}
public class Cat extends Animals(){
}
public static void main(String[] args){
Cat myCat = new Cat();
}//结果输出"Animals的构造方法被执行了"
.
.
.
3.父类的构造器不是 无参构造器 时,系统会擦除默认给定的无参构造器.此时,子类对象无法通过无参构造器实例化父类对象,进而实例化自己,必须也要指定显式的构造器给子类
public class Animals{
public Animals( int i){
System.out.println("i");
}
}
//这样写会报错:
//implict super constructor Animals() is undefined for
// default constructor.Must define an explict
// constructor
//Cat的默认构造器无法调用Cat父类无参构造方法Animals().必须要为
// Cat类显式调用一个构造器
//implict翻译成无参构对不?有点尴尬.要是隐式构造器我就呵呵了
public class Cat{
}
可以看出,主要是父类无参构造器被擦除了.只要有父类有无参构造器,子类便能正常实例化
public class Cat{
public Cat(){
//使用super关键字,写入参数.自动进行方法的重载.
super.(1);
}
}