1.6.2继承

1.6.2继承,第1张

1.6.2继承 1.继承概述
  • 让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员
2.继承的格式

public class 子类名 extends 父类名{}

3.继承的好处与弊端

3.1好处

  • 提高代码的复用性
  • 提高代码的维护性
  • 让类与类之间产生了关系,是多态的前提

3.2弊端

  • 继承是侵入性的
  • 降低了代码的灵活性 继承关系,导致子类必须拥有父类非私有属性和方法,让子类自由的世界多了些约束
  • 增强了代码的耦合性 代码与代码之间存在关联都可以将其称之为“耦合”。
4.什么时候使用继承
  • 当类与类之间,存在相同(共性)的内容,并产生了is a 的关系,就可以考虑使用继承来优化代码。
5.继承的特点
  • Java只支持单继承,不支持多继承,但支持多层继承。
5.1继承的成员变量访问特点
  • 子类和父类有相同变量名的变量时,Java采用就近原则来访问变量,即子类局部>子类成员>父类成员
  • 子父类含有相同变量名的变量,调用父类变量使用super关键字进行调用
super关键字

super关键字的用法和this关键字用法类似 * this:代表本类对象的引用 * super:代表父类存储空间的标识(可以理解为父类对象引用)

  • 子类当中含有和父类相同的方法名称,需要调用父类方法时,使用super.方法名调用父类方法

6.方法重写

方法重写概述:在继承体系中,子类出现了和父类中一摸一样的方法声明 方法重写的应用场景当子类需要父类的功能,而功能主体子类有自己特有内容,可以重写父类中的方法, 这样既沿袭了父类的功能,又定义了子类特有的内容

6.1方法重写和方法重载
  • 方法重写:在继承体系中,子类出现了和父类一模一样的方法声明(方法名,参数列表,返回值类型)
  • 方法重载:在同一个类中,方法名相同,参数列表不同,与返回值无关。
6.2方法重写注意事项
  • 父类中私有方法不能被重写
  • 父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
  • 静态方法不能被重写,如果子类中,也存在一个方法声明一模一样的方法,可以理解为,子类将父类中同名的方法隐藏了起来,并非是方法重写!
  • 子类重写父类方法时,访问权限必须大于等于父类

  • 子类中所有的构造方法默认都会访问父类中无参的构造方法
    • 原因:子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据,所以子类初始化之前,一定要先完成父类初始化
  • 所有类中构造方法第一条语句默认都是:super();如果编写的类没有手动指定父类,系统也会自动继承Object类(Java继承体系中最顶层父类)
  • 一个Java文件中允许存在多个类,但是只能有一个使用Public修饰类,且被修饰的类名需要与文件名相同
  • 如果父类中没有空参构造方法,只有带参构造方法解决方案:
    • 子类通过super,手动调用父类的带参的构造方法
    • 子类通过this去调用本类的其他构造方法,本类其他构造方法再通过super去手动调用父类的带参的构造方法(不推荐)
  • this(),super()必须放在构造方法的 第一行有效语句,并且二者不能共存
7.抽象类
  • 抽象方法:将共性的行为(方法)抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可以定义为抽象方法。
  • 抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
// 抽象方法的定义格式:
public abstract 返回值类型 方法名(参数列表);

// 抽象类的定义格式
public abstract class 类名{}
7.1抽象类的注意事项
  1. 抽象类不能创建对象(实例化)
  2. 抽象类中有构造方法
  3. 抽象类的子类
    • 必须要重写抽象类的抽象方法
    • 可以将自己也变成一个抽象类(意义不大)
  4. 抽象类中的方法
    • 抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类
8.模板设计模式
  • 设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
  • 模板设计模式:把抽象类整体就可以看作成一个模板,模板中不能决定的东西定义成抽象方法,让使用模板的类(继承抽象类的类)去重写抽象方法实现需求
  • 优势:模板已经定义类通用结构,使用者只需要关心自己需要实现的功能即可
9.final关键字
  • final关键字是最终的意思,可以修饰(方法,变量,类)
  • final修饰的特点
    • 修饰方法:表明该方法是最终方法,不能被重写
    • 修饰变量:
      • 基本数据类型变量:其值被赋值一次后不能被更改;
      • final修饰成员变量初始化时机
        1. 在创建的时候,直接给值
        2. 在构造方法结束之前,完成赋值
      • 引用数据类型变量:地址值不能被更改,但是可以修改对象的属性值
    • 修饰类:表明该类是最终类,不能被继承
10.代码块

在Java中,使用{}括起来的代码被称之为代码块

分类:

  • 局部代码块位置:方法中定义
    • 作用:限定变量的生命周期,及早释放,提高内存利用率
  • 构造代码块位置:类中方法外
    • 特点:每次构造方法执行时,都会执行该代码块中的代码,并且在构造方法执行前执行
    • 作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
  • 静态代码块位置:类中方法外定义
    • 特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
    • 作用:在类加载的时候做一些数据初始化的 *** 作

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/794107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存