美文网首页
多态的弊端

多态的弊端

作者: Chris_Qyh | 来源:发表于2018-06-03 23:47 被阅读0次

多态的弊端和解决

弊端:

不能实现子类特有的功能

解决方法:

法1.创建子类对象调用子类方法(无法使用多态)
法2.把父类的引用强转为子类引用(向下转型)

强制转化的风险

强制转化,如果父类的引用本身不是指向子类对象的,那么就会出现ClassCastException异常

避免方法

引入instanceof运算符,判断对象所属的类型

对象a instanceof 类名A
表达式含义:判断某个对象是否是某个类
表达式的结果是一个boolean值:true or false

:null对象引用虽然与所有引用类型兼容,但null不是任何类型的实例,因此 null instanceof <类名>的结果永远是false

赋值兼容性规则:

1.对引用类型的变量进行赋值操作时,赋值号右边的表达式类型 必须与 左边的对象引用类型 相同或是其子类型 (赋值类型兼容)
2.方法的
return语句返回值类型
必须与 方法声明中的返回类型 相同或是其子类型(返回值类型兼容)
3.null值与所有的引用类型兼容,所有引用类型的变量都可被赋值为null

向上转型

把子变成父 父类引用指向子类实例

向下转型

把父转成子 子类引用指向父类实例 (要求父类的引用本来就指向子类对象)
向下转型的前提条件是向上转型

public class Demo1 {

  public static void main(String[] args) {
      //父类引用指向子类实例
      Animal cat = new Cat();
      //编译看左边,一旦使用了多态就无法再调用子类特有的方法
      //cat.maiMeng();//编译错误

      //解决方案2:向下转型
      // 默认情况下,jvm是不允许的。
      // 因为,Animal类型的引用,它既可以指向一个Animal对象,也可以指向一个Animal子类Cat的对象
      // 但可以通过强制转化的方式,访问到子类所特有的方法
      Cat c = (Cat) cat;
      c.maiMeng();

      Animal a = new Animal();
      transer(a);
      Animal b = new Cat();
      transer(b);

      // null值与所有的引用类型兼容,所有引用类型的变量都可被赋值为null
      Animal an = null;
      Cat cat2 = null;
}

  public static void transer(Animal a) {
      //当需要做强制转化的时候,首先利用instanceof运算符,判断一下,当前a是否是Cat
      if(a instanceof Cat) {
          //如果a是Cat类的对象
          Cat c = (Cat) a;
          c.maiMeng();
      }
   }
}

class Animal {
}

class Cat extends Animal {
  public void maiMeng() {
      System.out.println("mai meng");
   }
}

相关文章

  • 多态的弊端

    多态的弊端和解决 弊端: 不能实现子类特有的功能 解决方法: 法1.创建子类对象调用子类方法(无法使用多态)法2....

  • 多态

    多态:父类类型的引用指向了子类类型的对象. 多态的弊端:只能调用父类中的功能,不能调用子类特有的功能. 多态的好处...

  • 多态

    对象的多态性: 多态的好处: 提高了代码的扩展性,前期定义的代码可以使用后期的内容。 多态的弊端: 前期定义的内容...

  • Java-面向对象-多态

    多态 体现 好处 提高了程序的扩展性。 弊端 前提 子类的特有方法如何调用呢? 向下转型的注意事项 转型总结 多态...

  • 1.9 多态基本概念

    本小节知识点: 【了解】什么是多态? 【掌握】多态的条件 【了解】多态的优点 1.什么是多态? 什么是多态:多态就...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • 详解Java多态

    详解Java多态 多态定义 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态...

  • 多态

    1.多态 1.多态 1.1 要点 多态是方法的多态,不是属性的多态 多态的存在有三个必要条件:继承;方法重写;父类...

  • Java_basic_10: 多态polymorphism

    多态polymorphism 多态是指对象的多种形态 主要可以分为引用多态和方法多态 继承是多态的实现基础 引用多...

  • 六、多态与虚函数

    多态的基本概念 多态 多态分为编译时多态和运行时多态。 编译时多态主要是指函数的重载(包括运算符的重载)。对重载函...

网友评论

      本文标题:多态的弊端

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