多态

作者: 陶宁 | 来源:发表于2018-01-21 17:11 被阅读0次

    对象具有多种形态

    1、引用的多态

      父类的引用可以指向本类的对象
      父类的引用可以指向子类的对象
    

    2、方法的多态

    父类的引用可以指向本类的对象
    Animal obj = new Animal();
    父类的引用指向子类的对象
    Animal obj1 = new dog();
    注意: 不可以使用一个子类的引用指向父类的对象
    注意:此时的obj1 只能调用dog类中继承自Animal类中的方法,无法调用dog类中的非继承方法。

    方法的多态
    同方法名 因参数不同可以指向不同的方法

        void eat(){
        System.out.print("狗狗爱吃骨头");
    }
    
        void eat(int age){
        System.out.print("狗狗年级大了就吃不动了");
    }
    

    如果调用eat方法 传入int参数 就可以得到“狗狗年级大了就吃不动了”

    多态中引用类型转换
    1、向上类型转换(隐式/自动类型转换,是小类型到大类型的转换)(无风险)
    2、向下类型转换(强制类型转换,大类型到小类型)(有风险)
    3、instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题

        Dog dog = new dog();
        Animal animal = dog;//向上类型转换  无风险
       Dog dog2 = (Dog)animal; //向下(强制)类型转换 有风险
       Cat cat =  (Cat)animal;//eclipse无提示 但是编译无法通过
    

    问题是:
    1、编译时 cat类型
    2、运行时 dog类型
    instanceof 可以判断

        Dog dog = new dog();
        Animal animal = dog;//向上类型转换  无风险
       Dog dog2 = (Dog)animal; //向下(强制)类型转换 有风险
    if(animal instanceof cat){
       Cat cat =  (Cat)animal;//eclipse无提示 但是编译无法通过
    }else{
      System.out.print("无法进行类型转换,转换成cat类型");
     }
    

    相关文章

      网友评论

          本文标题:多态

          本文链接:https://www.haomeiwen.com/subject/lxhqaxtx.html