这篇文章主要是对Java语言面向对象的三大特性中的继承性进行总结,主要包括:
- 什么是继承性及其好处
- 继承性的实现与使用
- 方法的重写
- super关键字
什么是继承性?
所谓的继承性就是指一个类B可以继承另一个类A的所有属性和方法,并且在此基础上进行扩展或修改。继承性的存在可以带来以下几点好处: - 减少代码的冗余,提高代码的复用性。子类可以直接继承父类的所有属性和方法,这样,子类中的一些方法就可以直接使用父类中的就可以了,而不需要自己在重新创建。
- 便于功能的扩展。子类如果需要扩展出某一个功能,可以直接调用父类中存在的一些必要的方法,也可以直接对父类的方法进行重写。
- 继承性为多态性提供了基础。没有继承性,那么多态性就无法实现。
继承性的实现
Java中继承的实现使用以下方式:
1 | class A extends B {} |
其中类A称为子类/派生类,B类称为父类/超类/基类。
Java.lang.Object类是一切类的父类。
当子类A继承了父类B后,子类就能获得父类中的属性和方法
父类私有的属性和方法,子类也依然继承,但是需要受封装性影响,子类不能直接调用父类的结构.
子类在继承父类以后,还可以声明自己特有的属性或方法。
与此同时,类恶道继承也需要满足以下的规则:
- 一个类可以被多个子类继承

- 一个类只能由一个父类,称为单继承

- 类可以被多层继承,子类直接继承的父类,称为直接父类,间接继承的父类称为间接父类。子类继承父类以后,就获取了直接父类以及所有间接父类中的属性和方法。

方法的重写
显然如果一个子类继承了父类的方法,父类的方法也不能百分百的满足子类的需求,这时候就需要对父类中相应的方法进行改造,这样,程序执行时,子类的方法将覆盖父类的方法。
子类重写方法的声明格式如下:
权限修饰符 返回值类型 方法名(形参列表) throws 异常类型{ 方法体 }
方法重写的要求
方法的重写需要满足以下规定:
1.子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
2.子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
- 如果父类中被重写的方法的返回值类型是void,那么重写后的方法也需要时void
- 如果父类中被重写的方法的返回值类型是基本s数据类型(比如double),那么子类重写的方法的返回值也必须是相同的类型
- 如果父类中被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类也可以是A类的子类。
3.子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
子类不能重写父类中声明为 private权限的方法
4.子类方法抛出的异常不能大于父类被重写方法的异常
1 | 例如:父类中由一个方法 |
super关键字
虽然我们可以在子类中对父类的方法、属性等进行重写,但是有时候我们又想在重写之后继续使用父类中的方法或属性,这是怎么办呢?
此时就需要使用关键字super,该关键字可以在属性、方法和构造器前使用,表明这里使用的是父类中的属性、方法或者构造器。
在调用父类中的属性和方法是,如果该方法没有在子类中重写,那么我们就可以省略super,编译器将自动调用父类中的方法,当子类重写了父类中的方法后,supper表明仍然使用父类中的方法。
- 在调用构造器时,可以在子类中显式的使用super(形参列表)的方式,调用父类中声明指定的构造器,且“super(形参列表)”必须声明在子类列表的首行。
- 如果父类中没有无参构造器,并且在子列的构造器中有没有显式的调用父类的其他构造器,将会报错
- 其次在类的构造器中,this和supper调用同一构造器只能二选一,且子类中的构造器默认有一行super()以构建父类。
- 在类的多个构造器中,至少有一个类的构造器使用了super
看下面一个简单的例子:
1 | //声明了一个animal类作为父类 |
1 | //创建了animal的子类dog |
1 | public static void main(String[] args) { |
本文链接: https://quandongli.github.io/post/3197e8b6.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
