![](https://img.haomeiwen.com/i8430120/13eeeccebaae4f1a.png)
前面我们学习了类和对象的概念,学习了方法的重载,今天我们将学习面向对象另一个重要特性,继承(inheritance)。利用继承,我们可以基于一个已经存在的类狗仔一个新的类,继承已经存在的类方法和域。并且我们可以添加一些新的方法和域。这是面向对象编程一个非常重要的特性。
学完此次课程,我能做什么?
学完此次课程,我们将了解Java的继承、子类、父类的概念,以及如何使用。
学习此次课程,需要多久?
5-10分钟
课程内容
假设公司我们新建了一个员工(Employee)类,而这个公司有一位经理,经理拥有员工的基本特性,并且会有一些额外的功能(方法)。每一名经理都是一名特殊的员工,这种关系就是明显的继承关系。
语法: extends 关键字
public class Manager extends Employee{ 添加方法和域 }
关键字 extends 表明正在构造的新类派生于一个已存在的类 。 已存在的类称为超类
) 派生类( superclass ) 、 基类 ( base class ) 或父类 ( parent class ) ; 新类称为子类 ( subclass )派生类( derived class ) 或孩子类 ( child class ) 。
看一下入门程序:
首先定义一个父类 Employee 类
![](https://img.haomeiwen.com/i8430120/35a00365f05f35f3.png)
然后新建一个经理类,继承自Employee类。
![](https://img.haomeiwen.com/i8430120/b73c9cafc545ef7a.png)
实例化一个经理对象,并且调用父类的方法。
![](https://img.haomeiwen.com/i8430120/ada5ffc9426f1cee.png)
程序执行结果:
![](https://img.haomeiwen.com/i8430120/bcf00fc3b0a40e3b.png)
方法重写
当父类的某个方法并不适用于子类时,我们可以在子类重新定义该方法,并且修改逻辑。这就是方法重写或者覆盖。
我们新建一个Manager2,继承自Employee类,重写了父类的getName()方法。
![](https://img.haomeiwen.com/i8430120/bc999c9986bce28d.png)
![](https://img.haomeiwen.com/i8430120/ac80673d59ca6693.png)
执行结果:
![](https://img.haomeiwen.com/i8430120/c2e7458fc4fdaa49.png)
如果子类覆盖了父类的某个方法,但是在项目中我们想调用父类的方法,可以在子类使用super关键字。
![](https://img.haomeiwen.com/i8430120/9082b49d364ab1b7.png)
通过super()方法,在子类构造器,调用超类构造器
构造方法中,设置父类私有域
![](https://img.haomeiwen.com/i8430120/f08dd95e63b09985.png)
在子类中给,父类的私有域赋值。
![](https://img.haomeiwen.com/i8430120/1f437846828004cb.png)
![](https://img.haomeiwen.com/i8430120/25bfaec8fd0b6cc4.png)
运行结果:
![](https://img.haomeiwen.com/i8430120/25d4c112b5e0d098.png)
小结
要注意的是Java和Python不同,不支持多继承。一个Manager实例,肯定是一个Employee,一个Employee不一定是Manager。
关注公众号,回复 java基础 下载全部代码+PDF版电子书
![](https://img.haomeiwen.com/i8430120/f0954f8bbfc8f52f.png)
网友评论