super代表父类的引用,可以用来访问父类的属性方法和构造器
用法:super.属性名; super.方法名; 【非private的属性和方法】
super(参数列表);【只能放在构造器的第一句,只能出现一句】
super不可以访问父类的private(私有的)属性和方法
细节:
1.调用父类构造器的好处:分工明确,父类的属性由父类自己初始化,子类的属性由子类自己初始化。
2.当子类和父类中有方法重名时,想访问父类的则必须用super。
没有重名时,有三种方法可以访问:super,this,直接访问。
this. 和 直接访问 这两种方法的规则:
使用他们两个时,是先去子类中找有没有要访问的方法和属性,有就访问,没有就向父类中去找。在父类中有的话就访问父类的,没有时继续向上层找父类的父类,一直到Object类。如果Object类中也没有时就会提示该方法或属性不存在。如果在找的过程中,找到了但是无法访问(比如父类的该方法或属性是用private修饰的)那么,就会报错,cannot access。
使用super. 去访问时的规则:
使用super. 访问时,它会直接去父类查找,跳过当前子类。其他规则一样。
3.super的访问不限于直接父类【注:如果父类中不存在就去父类的基类(上级类,就是父类的父类,不同的叫法)去查找】,如果本类和父类的基类有同名方法,也可用super去访问父类的基类中的方法。多个基类中都存在同名方法,那super的访问遵循就近原则。super的访问全都遵守访问权限的规则【例如:private修饰的属性和方法无法访问】。