java 多态性

1.多态是面向对象的最后特征,多态体现在连个方面

方法的多态性:重载与覆写.
重载:同一个方法名称,根据不同的参数类型及个数可以完成不同的功能;
覆写:同一个方法,根据操作的子类不同,所完成的功能也不同.

对象的多态性:父子类对象的转换.
向上转型:子类对象变为父类对象,父类 父类对象=子类对象 ,自动;
向下转型:父类对象变为子类对象,子类 子类对象=(子类) 父类对象 ,强制;

对象的多态性和方法覆写时紧密联系在一起的.

对象向上转型
实现了一个对象向上转型操作,虽然最后调用print()方法的是A类对象,但是由于此时实例化的是子类对象"new B();",而且print()方法被子类覆写了,所以最终调用的就是被B类覆写过得print()方法.
在这里插入图片描述

对象向下转型
强制将父类对象变为子类实例,开始实例化的依然是子类对象(new B()),所以最终调用的print()方法依然是被子类覆写过得方法.

在这里插入图片描述
运行实例
在这里插入图片描述

以实例化子类所覆写过的方法为主.
针对于对象向上转型,对象转型的操作过程中,应重点观察两点.
1.实例化的是哪个子类
2.要调用的方法是否是被子类所覆写,覆写后调用的一定是被覆写过得方法.

代码如下
在这里插入图片描述
运行结果
在编译时没有任何错误信息,但是出现转换异常,即两个没有关系的类互相发生了对象的强制转型,所以可以得出结论:当对象发生向下转型关系前,一定首先发生对象的向上转型关系.
在这里插入图片描述

在发生向下转型的操作中,可以先判断某个对象是否是某一个类的实例,只需使用instanceof关键字即可.

判断某一个对象是否为某个类的实例
对象 instanceof 类 返回boolean型

观察instanceof验证
在这里插入图片描述
运行结果
向下转型前,使用了instanceof关键字判断对象是否是某个类的实例,随后调用了子类扩充的方法getB().
在这里插入图片描述

不使用对象转型,采用方法重载的方式完成.
采用这种方式进行代码开发的话,会存在严重问题,如果子类多的话,方法重载也会多,一旦有新的子类产生,那方法都要被重新修改.

在这里插入图片描述
在这里插入图片描述
利用对象向上转型完成
定义fun()方法时直接使用A类作为接受的参数,他的所有的子类都可以利用对象的向上转型调用fun()方法,由于fun()方法的参数类型统一,所以出现再多子类,方法也不需要在修改.
在子类操作中,尽量向父类靠拢,如果子类自己扩充父类方法,那这些方法就无法使用了.

public class Test8 {
    public static void main(String[] args) {
        fun(new B5());  //传递子类实例
        fun(new C());   //传递子类实例
    }

    public static void fun(A5 a) {        //接受A5类子类实例
       a.print();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值