Java面向对象——继承
继承
继承是指这样一种能力:
- 它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行扩展。
- 通过继承创建的新类称为「子类」或「派生类」,被继承的类称为「基类」、「父类」或「超类」
extends
继承
- Java : 采用单继承,使用树状结构进行类的管理
- Java中
Object
是所有类的 父类 - C++、Python:采用多继承,形成的是网状结构
字类可以继承父类中定义的 公开的 或者 受保护的 属性 和 方法
public class Cat extends Animal{
}
super
关键字
- super 代表超级的意思,调用父类的信息
- super 可以调用父类的属性和方法,和
this
用法一致- super 还可以调用父类的构造方法,用法和this调用构造方法一致
方法的重写
当父类中,提供的方法,不满足 字类的需求的时候
那么字类可以重写父类的方法,这种现象被称为方法的重写/覆盖
方法的重写主要体现的程序的可扩展性
* 方法重写的限制:字类能够继承的方法,才可以重写 *
方法重写的要求
-
a)、权限修饰符和父类保持相同,或者比父类的权限更高
-
b)、方法的返回值类型,方法名,参数列表必须和父类完全一致
-
c)、异常的处理和父类相同,或者比父类抛出的异常更窄
* @Override 可以检查方法是否满足重写的要求,可加可不加 * * idea 可以使用 ctrl + o 快捷键快速重写方法
多态
多态:将子类对象赋值给字类的引用,调用父类的方法,显示了字类的效果,这种现象称为多态
多态会导致子类对象向上转型
向上转型会导致子类的特性丢失
- 如果需要显示子类的特性,需要做向下转型
- 如果确实需要向下转型,需要用到强制类型转换
- 强转有风险
- 如果不确定类型,添加判断语句,配合强转
- 语法:对象
instanceof
类型是不是
JDK 16 新特性
final
修饰符
- 用final 修饰的类,不能被继承
- 用final 修饰的方法,不能被重写
static
静态方法
- 不能被重写,没有多态
sealed
密封类
- permits 允许
- public sealed class Animal permits Dog , Cat{} :定义一个 密封类 Animal, 只允许 Dog, Cat 继承
- 继承 sealed 类的 子类 必须是 final 或者 sealed
- sealed 必须定义需要继承的 子类
Abstract
抽象类
- 抽象方法:只是提供一个标准,没有具体的方法
- 抽象类用 abstract 修饰
- 抽象类 中不一定有抽象方法,抽象类可以没有子类
- 如果一个类中有抽象方法,那么这个类必须定义为抽象类
- 抽象类不能创建对象、但有构造方法
abstract
、static
和 final
修饰符
- abstract 和 final 修饰符 不能同时修饰类
abstract 修饰的是内部类 可以被继承,final 修饰的类不能被继承
- abstract 和final 修饰符 不能同时修饰方法
abstract 修饰的方法子类中要进行重写,final 修饰的方法不能被重写
- abstract 和static 可以同时修饰类
- abstract 和 static 不能同时修饰方法
abstract 修饰的方法可以被重写,static修饰的方法不能被重写,没有多态
- static 和final 能同时修饰类,属性 和方 法