0%

面向对象编程(中级部分)-3

面向对象编程(中级部分)

★super关键字

  • super 代表父类的引用,用于访问父类的属性、方法、构造器

    1. 访问父类的属性super.属性名,但不能访问父类的 private 属性;

    2. 访问父类的方法super.方法名(参数列表),但不能访问父类的 private 方法;

    3. 访问父类的构造器super(参数列表),只能放在构造器的第一句且只能出现一句。

      调用父类的构造器的好处:分工明确,父类属性由父类初始化,子类的属性由子类初始化

super使用细节
  1. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用superthis、直接访问是一样的效果。
  2. super 的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用 super 去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用 super 访问时遵循就近原则(先父类,然后父类的父类,然后父类的父类的父类,以此类推……就是上面的查找关系)。
super和this的比较

![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Java-notebook/img/Java/C8-12.jpg)

★方法重写override

  • 方法覆盖(方法重写):子类有一个方法,和父类的某个方法的名称、返回类型、参数都一样,那么我们就说子类的方法覆盖了父类的方法。

    注意:子类和父类不一定只有单一的直接关系。

方法重写细节
  1. 子类的方法的形参列表、方法名称,要和父类的方法的形参列表、方法名称完全一致
  2. 子类方法的返回类型和父类方法的返回类型要一样,或者是父类方法的返回类型的子类,例如父类方法的返回类型是 Objectpublic Object getInfo(),子类方法的返回类型是 Stringpublic String getInfo()
  3. 子类方法不能缩小父类方法的访问权限(若父类方法为 public,则子类方法只能为 public)。
方法重载和方法重写的比较

![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Java-notebook/img/Java/C8-13.jpg)

  • 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 + ".";
    }
---------------The End---------------