1. 继承的基本介绍
现实世界中有这样一种情况,因为有基因的存在,所以无论是人类还是其他生物,后代总会或多或少的拥有其父辈的一些特征。那么在程序中,对象之间可能或多或少地存在一些关系,可能存在相似的类等等。将其移植到Java中,就是继承的概念。
继承是面向对象三大特征之一,其基本作用是代码复用。但是继承最重要的作用是:有了继承才有了方法的覆盖和多态机制。继承需要采用extends关键字,语法格式如下:
1 | [修饰符列表] class 类名 extends 父类名{ |
Java语言中的继承只支持单继承,即一个类不能同时继承多个类,只能继承一个类。一些基本属于如下(B类继承A类):
- A类称为:父类、基类、超类、superclass;
- B类称为:子类、派生类、subclass。
- 在Java语言当中,子类继承父类都继承哪些数据呢?
- 私有的不支持继承;
- 构造方法不支持继承;
- 其他数据都可以被继承。
- 注意,如果一个类没有显式的继承任何类,该类默认继承JavaSE库当中提供的
java.lang.Object
类。Java语言中任何一个类中都有Object类的特征。
2. 方法覆盖
引入了继承,子类和父类之间的方法和属性就有了新的关系。一个典型的概念就是方法覆盖,之前提到方法重载的概念,再来回顾一下。
2.1 方法重载
方法重载又称为Overload
方法重载什么时候使用?
当在同一个类当中,方法完成的功能是相似的,建议方法名相同,方便程序员的编程。
什么条件满足之后构成方法重载?
- 在同一个类当中
- 方法名相同
- 参数列表不同:类型不同,顺序不同,个数不同
方法重载和什么无关?
- 和方法的返回值类型无关
- 和方法的修饰符列表无关
2.2 方法覆盖
子类继承父类,除了上述不能继承的属性和方法外,其余的属性和方法都会被继承。那么如果父类的方法不能满足当前要求,此时可以修改重新编写该方法,即覆盖。
方法覆盖又被称为方法重写,Override/Overwrite。
什么时候使用方法重写?
当父类中的方法已经无法满足当前子类的业务需求,子类有必要将父类中继承过来的方法进行重新编写,这个重新编写的过程称为方法重写/方法覆盖。
什么条件满足之后方法会发生重写呢?(代码满足什么条件之后,就构成方法的覆盖呢?)
- 方法重写发生在具有继承关系的父子类之间
- 方法名相同,返回值类型相同,形式参数列表相同
- 访问权限不能更低,可以更高。(即父类中的方法如果是public,则子类重写之后的不能比public权限低。)
- 抛出异常不能更多,可以更少。
建议方法重写的时候建议复制粘贴,不要编写,容易出错,可能导致没有产生覆盖。
注意:
- 私有方法不能继承,所以不能覆盖。
- 构造方法不能继承,所以不能覆盖。
- 静态方法不存在覆盖。
- 覆盖只针对方法,不针对属性。
3. 简单案例
1 | // 动物类 |
4. 备注
参考B站《动力节点》。