首页 理论教育 Java继承示例及多重继承情况

Java继承示例及多重继承情况

时间:2023-10-19 理论教育 版权反馈
【摘要】:图9.4.1继承关系示例图一般情况下,编程语言没有限制一个类可以继承的父类数量,因此一个子类可以有多个父类,如图9.4.2所示。图9.4.2一个子类继承多个父类Java中并不支持多重继承,一个子类只能继承一个父类。动手写9.4.1其运行结果为:图9.4.3子类继承父类示例子类也可以定义与父类属性名相同的属性,这时子类属性将覆盖父类的属性,也称为重写。

Java继承示例及多重继承情况

继承,是一种将类进行层级划分的概念。继承的基本思想是,在一个类的基础上,制定出一个新的类,这个新的类中不仅可以继承原来类的属性和方法,也可以增加新的属性和方法。原来的类被称为父类,新的类被称为子类。

举一个简单的例子,公司和不同行业公司之间的关系,如图9.4.1所示。

下图示例中,公司类具有法人属性和注册公司方法两个成员,互联网公司类和猎头公司类都有法人和注册公司,除此之外,还分别有研发部门、财务部门、研发项目、提供市场信息等各自的成员。这三个类中,公司类是父类,具有通用的属性和方法,互联网公司和猎头公司都是公司类的子类,继承了父类的法人和注册公司,并且还各自具有自定义的属性和方法。

图9.4.1 继承关系示例图

一般情况下,编程语言没有限制一个类可以继承的父类数量,因此一个子类可以有多个父类,如图9.4.2所示。

图9.4.2 一个子类继承多个父类

Java中并不支持多重继承,一个子类只能继承一个父类。但是,Java提供了接口interface概念,一个子类可以实现多个接口。接口的概念会在本章后面小节进行介绍。

Java中提供了extends关键字来声明一个子类继承了父类,extends关键字后面只允许出现一个类名。子类可以继承父类的所有非私有的成员属性。

动手写9.4.1

其运行结果为:

图9.4.3 子类继承父类示例

子类也可以定义与父类属性名相同的属性,这时子类属性将覆盖父类的属性,也称为重写(Override)。动手写9.4.2中,ChildClass类中的name属性就覆盖了ParentClass类中的name属性,此时子类操作的属性就是自己定义的成员属性,覆盖了从父类继承来的成员属性。

动手写9.4.2

其运行结果为:

图9.4.4 子类覆盖父类属性示例

同时,子类也可以继承父类的所有非私有的成员方法,这里是指权限修饰词为public或protected的方法,子类无法访问private修饰的方法。

动手写9.4.3

其运行结果为:

图9.4.5 子类继承父类方法示例

子类也可以重写父类的方法,此时子类重写的方法名称须与父类方法名称一致,且返回值类型和入参都不能改变,同时子类重写的方法不能缩小父类方法的访问权限。重写方法的好处在于,子类可以根据需要定义属于自己的行为。

动手写9.4.4

其运行结果为:

图9.4.6 子类重写父类方法示例

提示

成员方法定义时,会有抛出异常的情况。子类重写这类方法时必须和父类方法抛出异常保持一致,例如父类方法抛出了IOException,子类方法也必须抛出IOException,不能抛出Exception异常。

Java中提供了关键字super,可以在子类调用父类中被重写的方法。

动手写9.4.5(www.xing528.com)

其运行结果为:

图9.4.7 调用父类中被重写的方法示例

子类不能继承父类的构造方法,父类的构造方法只属于父类。但是我们可以使用super关键字去访问父类的构造方法并给父类的成员属性进行赋值。调用父类的构造方法时,super语句必须是代码块的第一条执行语句。

动手写9.4.6

ParentClass() {

System.out.println("父类无参构造方法"); }}

其运行结果为:

图9.4.8 调用父类方法示例

super关键字也支持将参数传递给父类的构造方法。

动手写9.4.7

其运行结果为:

图9.4.9 父类传参示例

Java中提供了this关键字,用来获取当前子类中定义的成员属性或成员方法;当成员变量与方法内定义的变量重名时,也可以用this关键字来作区分并获取类中定义的成员变量。具体用法如下所示:

动手写9.4.8

其运行结果为:

图9.4.10 this关键字使用示例

继承可以被组合使用,即继承具有传递性,例如B类继承了A类,C类继承了B类,这时C类拥有A类和B类的属性和方法,如下所示:

动手写9.4.9

其运行结果为:

图9.4.11 传递继承示例

子类在创建一个新对象时,执行顺序是先找到最根的父类,接着开始执行根父类的构造方法,然后依次向下执行派生出来的子类的构造方法,直到执行完所有子类的构造方法为止。动手写9.4.9中就是依次执行A-B-C类的构造方法。

提示

当创建一个类时,若没有指定父类,Java会默认使该类继承Object类。也就是说,所有类都是Object类的子类,都可以继承或重写Object类的方法。Object类中较常用的方法有equals()、toString()、clone()等。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈