Java多态

认识

在继承或实现情况下的一种现象,表现为:对象多态,行为多态。

对象多态

狼和乌龟都是动物的子类
例如狼是动物的子类。我们可以写 Animal a1=new Wolf();

行为多态

然后a1.run().编译看左边,运行看右边,也就是说,会先看Animal里面有没有run,如果没有,那么直接报错。然后运行的时候会找子类Wolf的方法来调用。也就是说必定存在子类的方法重写·。所以多态下不能调子类独有的方法。
如果想要调用子类独有的方法,那么可以采用强制类型转换,强制转换类型为子类的。
注意
而对于成员变量来说,编译看左边,运行也看左边。如Animal和Wolf都有成员变量name,当我访问a1.name,实际上会出现Animal的name。

好处

理解来说,成员变量不需要多态,而在多态形式下,右边对象是解耦合的,更便于扩展和维护。各个部分可以随时拼装(其中一个不好用,可以只换掉这个,而不改变其他)。
定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强,更便利。

类型转换

Animal a1=new Wolf();存在自动类型转换。子类自动转为父类
强制类型转换:父类转变为子类
此处注意小心:如Animal a1=new Tortoise();
Wolf w=(Wolf)a1,那么由于编译看左边,所以强制类型转换不报错,但是运行看右边,发现狼指向了乌龟,所以报错。
强转时可以问问变量的真实类型,比如写if(a1 instanceof Wolf),比如当形式参数是Animal的时候我们无法确定这个到底是狼还是乌龟,但我们又想要调用子类的独有功能,那么我们就需要加上这句判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值