java学习——继承

java学习——继承

前言

继承是面向对象语言的一种特性,利用继承,人们可以基于一个已存在的类构造一个新类。
继承已存在的类就是复用(继承)这些类的方法和域。
在此基础上,还可以添加一些新的方法和域,以满足需求。
继承是java程序设计中的一项核心技术
关键字extends表示继承

继承的格式

public class Animals {}
public class Cat entends Animals {}

代码块

  • 在java中,使用{}括起来的代码被称作代码块,根据其位置和生命的不同,分为局部代码块,构造代码块,静态代码块和同步代码块
  • 局部代码块:在方法中出现,限定变量生命周期,及早释放,提高内存利用率
  • 构造代码块:在类中方法外出现,多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法之前执行
  • 静态代码块:在类中方法外出现,并用static修饰符修饰,用于给类初始化,在类加载时执行一次,并且只执行一次
  • 一个类的静态代码块,构造代码块,构造方法的执行流程:
    静态代码块 > 构造代码块 > 父类无参构造方法 > 子类构造方法

继承的优势与弊端


  • 继承的优势
    • 提高了代码的复用性
    • 提高了代码的维护性
    • 让类与类产生了关系,是多态的前提
  • 继承的弊端
    • 类的耦合性增强

开发的一个原则:低耦合,高内聚
耦合:类与类的关系
内聚:就是自己完成某件事情的能力

继承的特点

  • java中只支持单继承,不支持多继承,即只能有一个父类
  • java支持多层继承,即一个子类继承一个父类,另一个类可以继承这个子类

继承的注意事项


  • 子类只能继承父类的非私有成员,父类的构造方法不继承
  • 可以通过super关键字访问父类的私有成员和构造方法
  • 不要为了部分功能使用继承

原因:因为子类继承了父类的所有非私有成员,注意是所有成员,里面可能有我们不想用的成员

继承中成员变量的关系

  • 子类中成员变量和父类成员变量名称不同的时候,直接使用即可
  • 子类中成员变量和父类成员变量名称相同的时候,通过this关键字和super关键字来区别

this关键字和super关键字的用法和区别

  • this关键字:this代表本类对象的引用
  • super关键字:代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)
  • 用法:
    • 调用成员变量
      • this.成员变量 调用本类的成员变量
      • super.成员变量 调用父类的成员变量
    • 调用构造方法
      • this(…) 调用本类的构造方法
      • super(…) 调用父类的构造方法
    • 调用成员方法
      • this.成员方法 调用本类的成员方法
      • super.成员方法 调用父类的成员方法

注意: 不能在类方法(用static修饰的方法)中使用this

原因:静态方法随着类的加载而加载,成员变量和成员方法随着对象的创建而创建

继承中构造方法的关系

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

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

  • 父类没有无参构造方法报错时的解决办法

    • 在父类中加一个无参构造方法
    • 通过super关键字去显示调用父类的其他带参构造方法

    注意:this(…)或者super(…)必须出现在构造方法的第一条语句上

继承中构造方法的关系

  • 子类中的方法与父类中的方法声明不一样,直接调用即可
  • 子类中的方法与父类中的方法声明一样时,通过子类对象调用方法的查找使用顺序:子类 > 父类

方法重写与方法重载


  • 方法重写:子类中出现了和父类中方法声明一模一样的方法,也被成为方法覆盖,方法复写
  • 方法重载:本类中出现的方法命一样,参数列表不同的方法,与返回值无关
  • 子类对象调用方法时先找子类本身,再找父类
  • 方法重写的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容

方法重写的注意事项:
1. 父类中的私有方法不能被重写(因为父类私有方法子类无法继承)
2.子类重写父类方法时,访问权限不能更低

猜你喜欢

转载自blog.csdn.net/yjh728/article/details/80486349
今日推荐