关于子类与父类的构造器的小事情一直不是很了解,今天专门抽出空写几行代码,亲自搞清楚,这样印象比较深刻吧. 首先,构造器是针对类来讲的. 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); } }