java学习笔记(5) ---多态

1、多态的概述

多态的形式
        父类类型 对象名称 = new 子类构造器;
        接口    对象名称 = new 实现类构造器;
多态的概念
        同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征。
多态的识别技巧
        对于方法的调用:编译看左边,运行看右边。(调用方法的时候,父类或接口中必须有这个方法,运行的时候,是使用构造器中那类的方法)
        对于变量的调用:编译看左边,运行看左边。(变量都是父类或接口中的)
多态的使用前提
        (1)  必须存在继承或者实现关系。
        (2)  必须存在父类类型的变量引用子类类型的对象。
        (3)  需要存在方法重写。

2、多态的优劣势

优势
        1.在多态形式下,右边对象可以实现组件化切换,业务功能也随之改变,便于扩展和维护。可以实现类与类之间的解耦。
        2.实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,可以传入一切子类对象进行方法的调用,更能体现出多态的扩展性与便利。

劣势
        多态形式下,不能直接调用子类特有的功能。父类中没有子类独有的功能,所以代码在编译阶段就直接报错了!

3、引用类型强制类型转换

强制类型转换很好的解决了多态的劣势,因为通过强制类型转换后,父类可以强制转化成子类,子类就可以调用自身独有的方法了。
引用类型强制类型转换的语法
        1.父类类型的变量或者对象必须强制类型转换成子类类型的变量,否则报错!
强制类型转换的格式
        类型 变量名称 = (类型)(对象或者变量)
Java建议在进行强制类型转换之前先判断变量的真实类型,再强制类型转换!
        变量 instanceof 类型: 判断前面的变量是否是后面的类型或者其子类类型才会返回true
否则,会出现下面错误
 

public class PolymorphicDemo {
    public static void main(String[] args) {
        Animal a1 = new Cat();
        Wolf w1 = (Wolf) a1; // 这句话是错误的!!!!编译阶段没有报错!在运行阶段出现        
                            //ClassCastException类型转换成!

        // 应该用下面的方法来进行强制转化
        if(a1 instanceof Cat){
            Cat c1 = (Cat) a1;
            c1.catchMouse();
        }else if(a1 instanceof Wolf){
            Wolf w1 = (Wolf) a1;
            w1.catchSheep();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值