首页 理论教育 Java多态基础及转型示例与运行结果

Java多态基础及转型示例与运行结果

时间:2023-10-19 理论教育 版权反馈
【摘要】:动手写9.4.10其运行结果为:图9.4.12重载方法示例提示当方法只有返回类型不同时,是无法区分是哪个方法的,所以代码中不允许这种情况发生。动手写9.4.12其运行结果为:图9.4.13转型报错向下类型转换与向上类型转换动作相反,是指将父类对象引用转换为子类对象引用。动手写9.4.15其运行结果为:图9.4.16运行结果此外,instanceof也可以用来判断一个类是否实现了某个接口,这将在后面讲述抽象类和接口类的小节中进行介绍。

Java多态基础及转型示例与运行结果

多态是面向对象编程另一个重要的特性,它是指一个对象的行为可以有多种不同的表现形式。当一个子类继承了父类,并且重写了父类的方法,在创建对象时使用了父类引用指向子类对象,这时就存在多态。

前面章节中介绍了类的构造方法,在实际使用中会出现使用多种不同的方法来创建对象的情况,如有时需要初始化该类的全部属性,有时则只需要初始化部分属性。Java中提供了重载(Overload),使构造方法可以有多种被调用的方式。

和重写Override有些相似,重载Overload是指在一个类里的方法名称相同,但是入参不同(可以是个数的不同,也可以是类型的不同),返回类型也可以不同。每个重载方法的调用是通过参数类型和参数个数来作区分的,程序会根据入参动态识别具体调用的是哪个方法。重载不仅可以发生在同名的构造方法中,也可以发生在其他同名的普通方法中。

动手写9.4.10

其运行结果为:

图9.4.12 重载方法示例

提示

当方法只有返回类型不同时,是无法区分是哪个方法的,所以代码中不允许这种情况发生。

面向对象编程中,因为子类与父类存在继承关系,所以对象类型存在着转换,包括向上类型转换和向下类型转换。

向上类型转换是指将子类对象引用转换为父类对象引用。子类对象也可以被当作是一种父类的对象。这是因为继承的关系,子类总是能包含父类的非私有成员。一般情况下,变量会被声明为父类的类型,引用子类的对象。

动手写9.4.11

但是向上类型转换后,声明的父类对象不能调用只在子类中定义的成员,因为父类中并没有这些信息。

动手写9.4.12

其运行结果为:

图9.4.13 转型报错

向下类型转换与向上类型转换动作相反,是指将父类对象引用转换为子类对象引用。这种转换通常会出现问题,因为很明显子类中的内容可能并不存在于父类中,如果直接将父类对象引用赋值为子类定义的变量,程序会编译失败,即父类的对象并不一定是子类的对象。因此,向下类型转换总是伴随着向上类型转换一起出现的。(www.xing528.com)

动手写9.4.13

其运行结果为:

图9.4.14 向下类型转换示例

动手写9.4.13中,因为最后向下类型转换后的childClass的类型为ChildClass,具有了子类定义的childMethod()方法,所以编译不会报错。

提示

向上类型转换总是安全的。

Java中提供了instanceof关键字来判断一个对象是否是一个类的实例(也可理解为是否可以转换为该类的对象引用)。instanceof操作示例如下:

上面的表达式返回值为布尔值,一般出现在代码的条件语句中。

动手写9.4.14

其运行结果为:

图9.4.15 instanceof方法示例

从上面示例中可以看到,向上类型转换的对象即是父类的实例化对象,也是子类的实例化对象。如果一个类和另一个类不存在继承关系,使用instanceof进行判断时编译器会报错。

动手写9.4.15

其运行结果为:

图9.4.16 运行结果

此外,instanceof也可以用来判断一个类是否实现了某个接口,这将在后面讲述抽象类和接口类的小节中进行介绍。

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

我要反馈