java向下转型 继承_Java从入门到入土(35)多态,向上转型与向下转型

多态意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应不同的属性和方法。

具体来说就是指在继承过程中父类及子类中可以有多个同名但意义或实现方式不同的属性或方法,也就是重载和覆盖。在实际的应用中,还有两种特殊情形:向上转型和向下转型。

所谓向上转型即是声明父类变量后却在实例化时创建一个子类的实例。

首先先创建父类User与子类Student如下。其中子类中覆盖了父类的name变量与重写了print方法。新增了变量a与方法t。a10893fced571c1939ed41f53e0d60d9.png

be9270b54e04775c2dbb5c89fa2e4ab5.png

在main函数中进行验证3ac60606d822863ed1c6af0f4b36c676.png

代码解释:

第4行声明了一个User类型的变量s1,但是实例化的时候却实例化为Student类型。这种情况称为向上转型。s1非常特殊,他在编译时为User类型,而运行时却是Student类型。

实例s1可以访问父类User的成员变量,但是不能访问子类Student的成员变量。

实例s1可以访问父类User的方法,不能访问子类新增的方法。但是如果子类中有重写父类的方法时,实例s1调用此方法时调用的是子类的方法。

向下转型与向上转型相反,向下转型是先声明一个父类变量然后在实例化时创建一个子类的实例,接着使用强制类型转换转换为子类的引用。(现在看来也许很是多余,我想要使用子类对象直接实例一个子类实例多好,但是在java泛型的编程中,其用处很大)

接下来举一个简单例子ab2758d72e8a1edee894a891381d8969.png

如图,实例c是c1父类变量但是实例化时实例化的c2子类,其只能访问父类方法m1()。

第6行使用强制转换后可以对子类方法m2方法进行访问。

注意:向上转型总是成功的,而且是系统自动类型转换的,向上转型表明子类是一种特殊的父类。但是向下转型考虑到要进行强制类型转换,所以很可能产生异常,因此在类型转换之前可以先用instanceof运算符来判断是否可以类型转换。

instanceof运算符用来判断一个操作数是否属于某种数据类型,如果属于这种数据类型返回true,否则返回false,其语法格式如下:

变量 instanceof 数据类型

举个简单的例子:

Object s=”ss”;

boolean  b=s instanceof Long;

b的值为false,因为String类型不是Long类型。

其中Object类在java中是所有类直接或间接的父类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值