🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 继承 当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用 父类私有的成员,子类不能继承,因为根本看不到 不能为了继承某个功能而随意进行继承操作, 必须要符合 is a 的关系 * 苹果 is a 水果 * 男人 is a 人 * 狗 is a 人 , 这种情况就不能继承了 # 覆盖 子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖 重写需要注意的细节问题: 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。 写法上稍微注意:必须一模一样:方法的返回值类型 方法名 参数列表都要一样。 # super * 子父类中构造方法的调用 在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。 格式: ~~~ 调用本类中的构造方法 this(实参列表); 调用父类中的空参数构造方法 super(); 调用父类中的有参数构造方法 super(实参列表); ~~~ 为什么子类对象创建都要访问父类中的构造方法?因为子类继承了父类的内容,所以创建对象时,必须要先看父类是如何对其内容进行初始化的 原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。 当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法 如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗? 这时是没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。 父类构造方法中是否有隐式的super呢? 也是有的。记住:只要是构造方法默认第一行都是super(); 父类的父类是谁呢?super调用的到底是谁的构造方法呢? Java体系在设计,定义了一个所有对象的父类Object ## 注意 1. 如果我们手动给出了构造方法,编译器不会在给我们提供默认的空参数构造方法 如果我们没写任何的构造方法,编译器提供给我们一个空参数构造方法 2. 在构造方法中,默认的第一条语句为 super(); 它是用来访问父类中的空参数构造方法,进行父类成员的初始化操作 3. 当父类中没有空参数构造方法的时候,怎么办? a: 通过 super(参数) 访问父类有参数的构造方法 b: 通过 this(参数) 访问本类中其他构造方法 注意:本类中的其他构造方法已经能够正常访问父类构造方法 4. super(参数) 与 this(参数) 不能同时在构造方法中存在