继承( inherit)

:::tips

概述:

  • 继承是面向对象三大特征之一,可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
  • 格式:public class 子类名 extends 父类名{}
  • 父类也称为 基类、超类
  • 子类也称为 派生类
  • 子类必须调用父类的构造器,完成父类的初始化
  • 创建子类对象时,默认情况下会去调用父类的无参构造器
  • 如果父类没有提供无参构造器,则必须子类的构造器中用super去指定使用父类哪个构造器完成对父类的初始化工作,否则编译不通过
  • super()在使用时需放在构造器第一行
  • super()和this()只能放在构造器第一行,因此这两个方法不能共存一个构造器

好处:

  • 提高代码的复用性(多个相同的成员可以放到同一个类中)
  • 提高代码的维护性(如果方法代码需要改,修改一处即可)
  • 有利于功能扩展(子类继承父类就能得到父类的功能)

弊端:

  • 让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,
  • 削弱了子类独立性
  • 什么时候使用: is a a类属于b类

    java中类只支持单继承或者多层继承

    :::

    Super关键字

    :::tips

    基本介绍

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

super用法和this相似

  • this:代表本类对象的引用
  • super:代表父类存储空间的标识(可以理解为父类对象引用)

this:

  • 访问本类成员变量:this.成员变量
  • 访问本类构造方法:this(…)
  • 访问本类成员方法:this.成员方法

super:

  • 访问父类成员方法:super.成员变量
  • 访问父类构造方法:super(…)
  • 访问父类成员方法:super.成员方法

继承构造方法访问特点:

  • 子类中所有的构造方法默认都会访问父类的无参构造方法
  • 子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化前,一定先完成父类数据的初始化
  • 每个子类构造方法的第一条语句默认都是:super()

如果父类中没有无参构造方法,只有带参构造方法:

  • 在父类自己提供一个无参构造方法
  • 通过使用super关键字去显示调用父类的带参构造方法
  • [注意事项:java中类只支持单继承以及多层继承] :::

方法重写

:::tips

概述:

  • 子类中出现了和父类一模一样的方法声明

    应用:

  • 当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类中的方法,这样即沿袭了父类的功能,又定义了子类特有的内容

  • 注意:

    • 私有方法不能被重写
    • 父类私有成员子类是不能继承的,子类方法访问权限不能低于父类

      方法重写:

  • 方法名,参数列表相同

  • 返回值如果是基本类型,必须一样;如果是引用类型,子类可以是更小的类型
  • 修饰符访问权限不小于被重写方法
  • 定义位置在子父类中

    @Override注解

  • 加在重写方法上,可以检验重写格式 ::: ```java public class Test { public static void main(String[] args) {

    1. Son son = new Son();
    2. son.sTest();

    } }

class Father { int i = 20;

public void c() {
    System.out.println("父类方法");
}

}

class Son extends Father { int i = 30;

public void c() {
    System.out.println("子类方法");
}

public void sTest() {
    int i = 40;
    System.out.println(i);
    System.out.println(this.i);
    System.out.println(super.i);

    this.c();
    super.c();
}

} ```