基本介绍
super代表父类的引用,用于访问父类的属性、方法、构造器.
只能在构造器和方法中使用
基本语法
-
访问父类的属性,但不能访问父类的private属性
调用语法:super.属性名;
-
访问父类的方法,不能访问父类的private方法
调用语法:super.方法名(参数列表);
-
访问父类的构造器
调用语法:super(参数列表);
注意:只能放在构造器的第一句,只能出现一句!
super给编程带来的便利/细节
-
调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类属性由子类初始化)
-
当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super
去访问该属性或方法,如果没有重名,使用super、this、直接访问没有区别
-
super的访问不限于直接父类,如果爷爷类和本类有同名成员,也可以使用super去访问爷爷类的成员
如果多个基类都有同名的成员,使用super访问循环就近原则
super和this的比较
区别点 | this | super |
---|---|---|
访问属性 | 先在本类中查找有没有该属性,如果有则调用,如果没有就查找父类中有没有该属性,一直查找到object类,都没有就报错 | 直接在父类中查找该属性,如果父类中有则调用父类中的属性,如果父类中没有则一直查找到object类,都没有就报错 |
调用方法 | 访问本类中的方法,如果本类没有此方法则从父类继续查找,一直找到object类 | 访问父类中的方法,如果父类中没有此方法则从父类的父类继续查找,一直找到object类 |
调用构造器 | 调用本类构造器,必须放在构造器的第一行 | 调用父类的构造器,必须放在子类的第一行 |
特殊 | 表示当前对象 | 子类中访问父类对象 |