介绍:

使用extends关键字,让类与类之间产生子父类关系,子类可以直接使用父类公共的属性和方法

使用场景:

当多个类之间具有共同特征,将共同属性抽取到父类,使子类继承父类,子类独有的属性和行为则定义到子类中

好处与弊端:

好处:提高了代码的复用性、减少代码冗余、提高了代码的维护性、是多态的前提
弊端:增强了类的耦合性
开发的推荐原则 : 高内聚, 低耦合

继承中访问成员(成员变量、成员方法)的特点:就近原则

  • 问题 1: 当子父类中出现了重名的成员变量, 调用的时候, 优先使用谁的 ? 怎么区分 ?

调用的时候按照就近原则,使用子类的成员变量,使用super关键字区分

  • 问题2 : 子父类中出现了重名的成员方法, 创建子类对象调用方法, 执行的是谁的逻辑 ?
    执行的是子类的方法逻辑, 因为子类将父类的方法进行了方法重写

    如何在子类中使用父类的成员:

    使用super关键字,指定访问父类的成员。格式:super.父类成员变量/父类成员方法

    继承中构造方法的访问特点

    子类初始化之前, 必须要先调用父类的构造器,完成父类数据空间的初始化

    子类如何访问到父类构造方法

    在所有子类构造方法中, 第一行都默认隐藏了一句 super(); 访问父类的空参数构造方法

    this关键字

    含义:代表当前对象的地址
    this.本类成员变量
    this.本类成员方法();
    this();调用本类构造方法

    super关键字

    super : 代表父类存储空间的标识,(可理解为父类的地址),调用父类相关成员
    super.父类的成员变量;
    super.父类的成员方法();
    super(); 父类的构造方法
    super的省略规则 : 在子类当中, 调用父类的成员方法, 如果这个方法子类没有重写过, super.可以省略不写
    this(…)和super(…)使用注意点:
    子类通过 this (…)去调用本类的其他构造器,本类其他构造器会通过 super 去手动调用父类的构造器,最终还是会调用父类构造器的。
    注意:this(…) super(…) 都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。

    方法重载 (Overload):

    在同一个类中, 方法名相同, 参数不同, 与返回值无关
    参数不同: 1. 个数 2. 类型 3. 顺序

    方法重写 (Override):

    子类重写父类方法,需要保证方法声明完全一致(方法名,参数,返回值类型需要保持一致)
    为什么要重写父类的方法:对父类的方法,做方法增强

    方法重写的注意事项:

  • 子类不能重写父类的静态方法

  • 父类中私有方法不能被重写
  • 子类重写父类方法时,访问权限必须大于等于父类

    继承的特点:

  • 子类可以继承父类的属性和行为,但是子类不能继承父类的构造器

  • Java 只支持单继承, 不支持多继承, 但是可以多层继承
  • Java中所有的类都是Object类的子类

子类是否可以继承父类的私有成员:
可以继承,只是不能直接访问。
子类是否可以继承父类的静态成员:
子类可以直接使用父类的静态成员(共享)
个人认为:子类不能继承父类的静态成员。(共享并非继承)

权限修饰符:

private : 在同一个类中
(default) : 在同一个类中, 同一个包中
protected : 在同一个类中, 同一个包中, 不同包的子类
public : 任意位置

final修饰符

含义:是一种修饰符, 代表最终,可以修饰 (方法, 类, 变量)
被 final关键字修饰后的特点 :
方法 : 不能被重写
类 : 不能被继承
变量 : 只能赋值一次, 不可做修改

final修饰局部变量

问题 : final修饰基本数据类型变量, 引用数据类型变量, 有什么区别 ?

  • 基本数据类型 : 数据值不可改变
  • 引用数据类型 : 地址值不可改变,内部的数据值可以改变

    final修饰成员变量 : 初始化赋值时机
  • 在定义的时候直接赋值

  • 在构造方法中完成赋值

    final修饰的变量,就变成了自定义常量

    1.字面值常量 2. 自定义常量
    命名规范

  • 1.如果是一个单词,所有字母大写 VALUE

  • 2.如果是多个单词,所有字母大写,中间使用_分割 MAX_VALUE

    static(静态)修饰符

    static 修饰成员变量、成员方法
    static修饰成员变量:表示该成员变量只在内存中只存储一份,可以被共享访问、修改。
    被 static 修饰的成员特点 :

  • 被该类的所有对象所共享

  • 多了一种调用方式, 可以通过类名.调用(推荐使用)
  • 随着类的加载而加载, 优先于对象存在

    static访问注意事项:
  • static方法中, 只能访问静态的成员,不可以直接访问实例成员

  • 实例方法可以访问静态的成员,也可以访问实例成员。
  • 静态方法中是不可以出现this关键字的。

static 修饰成员变量场景:需要被类的所有对象共享时

static 修饰成员方法场景:

思路 : 一个方法的功能可以独立存在, 并且没有使用非静态的成员, 就可以设计为 static(为了使用类名调用)

  • 表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法。
  • 如果该方法是以执行一个共用功能为目的,则可以申明成静态方法。

    工具类 :

    如果一个类中, 所有的方法, 全部都是 static 静态的,建议将构造器私有化,工具类无需创建对象