目录
什么是继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
什么是构造方法(构造器)
构造方法最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象的实例进行默认的初始化。如果想改变这种默认的初始化,就可以通过自定义构造方法来实现。
继承关系下构造方法的访问特点详解
子类必须调用父类的构造方法,完成父类的初始化。
细节解读:当我们创建子类的对象时候,JVM会默认先调用的是父类的无参构造方法再调用子类的无参构造方法,而且顺序是先父后子。原因是因为子类的无参构造方法里面隐藏了一个super(),就会导致直接调用默认的调用父类的无参构造方法。而且无论写还是不写super()都会去调用。
当创建子类对象时候,不管使用子类的哪个构造方法,默认情况下都会去调用父类的无参构造方法。
细节解读:无论子类的无参构造方法还是有参构造方法中都隐藏了一个super()并且都会去默认调用父类的无参构造方法。
如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成父类的初始化工作,否则,编译不会通过。
细节解读:编译不通过原因是因为子类的每个构造方法内都隐藏了一个super()会去默认调用父类的无参构造方法,而此时若父类没有无参构造方法并且父类还存在有带参数的构造方法则无参构造方法被有参构造方法所覆盖或者说已不存在无参构造方法了,这时候就会产生矛盾。若想解除此问题必须在子类的构造器中用super去指定使用父类的哪个构造器来完成父类的初始化工作。
如果希望指定调用父类的某个构造器,则显式的使用super调用一下。
如果希望指定调用子类的某个构造器,则显式的使用this调用一下。
甚至还可以混合起来使用~
super()和this()在使用时都必须放在构造方法的第一行,并且不能同时存在
细节解读:super()和this()在使用时都必须放在构造方法的第一行,因此一个构造方法内super()和this()不能共存。