Java多态详解

本文详细介绍了多态的概念,包括其表现形式、前提条件(继承和重写),以及多态带来的好处,如灵活性和扩展性。同时讨论了多态调用的特点和其在编程中的优势。文中还指出了多态的弊端及解决方法,如使用类型转换和instanceof来访问子类特有功能。
摘要由CSDN通过智能技术生成
一、什么是多态

        同类型的对象,表现出的不同形态。

二、多态的表现形式

        父类类型  对象名称 = 子类对象;

三、多态的前提

        1.有继承/实现关系。

        2.有父类引用指向子类对象。

        例:

                Fu   f   =   new  Zi ();

                 ↑        ↑          ↑

        父类引用   指向    子类对象

        3.有方法重写。

四、多态的好处

        使用父类型作为参数,可以接受所有子类对象。

        体现多态的扩展性与便利。

五、多态调用成员的特点

        变量调用:编译看左边,运行也看左边。

        方法调用:编译看左边,运行看右边。

六、多态的优势

        1.在多态形式下,右边对象可以实现解耦合,便于扩展和维护。

        例:

                Person p = new Student();

                p.work();

                上述代码中,当我不想学生工作,想老师工作时,仅需改变创建对象部分修改,而p.work不需修改,即:当业务逻辑发生改变时,后续代码无需修改。

     修改后:

                Person p=new Teather();

                p.work();

        2.定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。

        例:设Student类继承于Person类

                   Teacher类继承于Person类

                   public void work(Person  p){

                   .....

}

                   Person s=new Student();

                   Person t=new Teacher();

                   work(s);//work类可以接收Student类对象

                   work(t);//work类可以接收Teacher类对象

七、多态弊端与解决方法

        7.1.多态弊端:不能使用子类的特有功能

        7.2.解决方法:

        类型转换

                由于多态编译看左边,其中子类特有方法父类没有时,该方法不能直接调用,需要进行类型转换,将父类转为子类。

        例:

                Student st=(Student)s;

        其中s为Person类型,进行强转为Student类型并赋值给st,之后可调用Student类中特有方法

        例:st.studentWork();

知识补充:判断对象是不是某一类型

        例:判断a是否为Student类型,可用instanceof

        使用方法: Boolean b=a instanceof Student;

                           a instanceof Student返回值类型为Boolean类型,若a为Student类型则返回true反之返回false。

        7.3.强制转换能解决什么问题

        可以转换成真正的子类类型,从而调用子类独有功能。

        转换类型与真实对象类型不一致会报错。

        转换时最好用instanceof关键字判断

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值