【博学谷学习记录】超强总结,用心分享 | JavaEE面向对象进阶之继承

60 阅读5分钟

继承

在介绍继承之前先介绍一个关键字,叫static关键字

一、static关键字

1.1 概述

static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量

1.2 特点

  • 被类的所有对象共享

    是我们判断是否使用静态关键字的条件

  • 随着类的加载而加载,优先于对象存在

    对象需要类被加载后,才能创建

  • 可以通过类名调用

    也可以通过对象名调用

总结:静态方法中,只能访问静态成员,静态中没有this关键字

二、继承的概述

继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非

私有的成员

2.1 继承的格式

格式:public class 子类名 extends 父类名 { }

范例:public class Zi extends Fu { }

Fu:是父类,也被称为基类、超类

Zi:是子类,也被称为派生类

2.2 继承的好处和弊端

好处

  • 提高了代码的复用性
  • 提高了代码的维护性
  • 让类与类之间产生了关系,是多态的前提
  • 弊端
  • 继承是侵入性的
  • 降低了代码的灵活性 继承关系,导致子类必须拥有父类非私有属性和方法,让子类多了些约束
  • 增强了代码的耦合性 代码与代码之间存在关联都可以将其称之为"耦合"。

2.3 继承的应用场景

  • 当类与类之间,存在相同 (共性) 的内容,并且产生了 is a 的关系,就可以考虑使用继承,来优化代码。

    • is..a的关系:谁是谁的一种,

      例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类

三、继承的特点

Java只支持单继承,不支持多继承,但支持多层继承。

单继承:子类只能继承一个父类

不支持多继承:子类不能同时继承多个父类

错误范例:class A extends B, C { }

多层继承:子类 A 继承父类 B ,父类B 可以 继承父类 C

四、继承的访问特点

4.1 继承的成员变量访问特点

在子类方法中访问一个变量

  • 子类局部范围找
  • 子类成员范围找
  • 父类成员范围找

注意:如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的(子类方法中访问一个变量,先找局部变量,再找成员变量,再找父类的成员变量)。

如果一定要使用父类的,可以通过super关键字,进行区分。

【super 关键字的用法和 this 关键字的用法相似

this,代表本类对象的引用;super,代表父类对象引用】

4.2 继承中成员方法的访问特点

通过子类对象访问一个方法

  • 子类成员范围找
  • 父类成员范围找
  • 如果都没有就报错(不考虑父亲的父亲…)

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

  • 子类在初始化之前,一定要先完成父类数据的初始化
  • 子类在初始化之前,一定要先访问到父类的构造方法,完成父类数据的初始化
  • 系统在每一个构造方法中,默认隐藏的一句代码:super()

注意:子类中所有的构造方法默认都会访问父类中无参的构造方法

子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认都是:super()

问:如果父类中没有空参构造方法,只有带参构造方法,会出现什么现象呢? 答:子类通过super,手动调用父类的带参的构造方法

总结:

  • 子类中所有的构造方法,默认都会通过super0访问父类中无参的构造方法每一个子类构造方法的第一条语句默认都是:super()
  • this(...)super(..)必须放在构造方法的第一行有效语句,并且二者不能共存

五、方法的重写

5.1 概述

在继承体系中,子类出现了和父类中一模一样的方法声明

5.2 应用场景

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

5.3 注意事项

  • 父类中私有方法不能被重写
  • 父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
  • 子类重写父类方法时,访问权限必须大于等于父类

注意:静态方法不能被重写! 如果子类中,也存在一个方法声明一模一样的方法,可以理解为,子类将父类中同名的方法,隐藏了起来,并非是方法重写!

六、final关键字

final 关键字是最终的意思,可以修饰(方法,变量,类)

final 修饰的特点

  • 修饰方法:表明该方法是最终方法,不能被重写
  • 修饰变量:表明该变量是常量,不能再次被赋值
  • 修饰类:表明该类是最终类,不能被继承