面向对象编程(中级部分)
★super关键字
super代表父类的引用,用于访问父类的属性、方法、构造器。访问父类的属性:
super.属性名,但不能访问父类的private属性;访问父类的方法:
super.方法名(参数列表),但不能访问父类的private方法;访问父类的构造器:
super(参数列表),只能放在构造器的第一句且只能出现一句。调用父类的构造器的好处:分工明确,父类属性由父类初始化,子类的属性由子类初始化。
super使用细节
- 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用
super、this、直接访问是一样的效果。 super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用super访问时遵循就近原则(先父类,然后父类的父类,然后父类的父类的父类,以此类推……就是上面的查找关系)。
super和this的比较

★方法重写override
方法覆盖(方法重写):子类有一个方法,和父类的某个方法的名称、返回类型、参数都一样,那么我们就说子类的方法覆盖了父类的方法。
注意:子类和父类不一定只有单一的直接关系。
方法重写细节
- 子类的方法的形参列表、方法名称,要和父类的方法的形参列表、方法名称完全一致;
- 子类方法的返回类型和父类方法的返回类型要一样,或者是父类方法的返回类型的子类,例如父类方法的返回类型是
Object:public Object getInfo(),子类方法的返回类型是String:public String getInfo(); - 子类方法不能缩小父类方法的访问权限(若父类方法为
public,则子类方法只能为public)。
方法重载和方法重写的比较

tip:可以用 super 来提高方法重写中代码的复用性。
例如子类和父类都有
say方法,那就可以用super来简化子类的say方法的代码,且提高了复用性。1
2
3
4
5
6
7
8
9//父类的 say 方法
public String say(){
return "My name is " + this.name + ". I'm " + this.age + " years old.";
}
//子类的 say 方法
public String say() {
return super.say() + "\n" + "My id is " + id + ". My score is " + score + ".";
}