Java构造器的小事情

    xiaoxiao2021-03-25  94

     关于子类与父类的构造器的小事情一直不是很了解,今天专门抽出空写几行代码,亲自搞清楚,这样印象比较深刻吧.  首先,构造器是针对类来讲的.  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); } }
    转载请注明原文地址: https://ju.6miu.com/read-23964.html

    最新回复(0)