java 多态

多态

实际就是 父类引用变量类型,指向子类实际对象

对象能执行那些方法,主要有左边的引用类型确定,与右边的实际对象关系不大——

注意事项:

  1. 多态是方法的多态,属性没有多态。

  2. 必须有联系,父类和字类,如果没有汇报错 ClassCastException

  3. 存在条件,继承关系

  4. 当为父类引用类型是,使用方法,会在父类查找,没有,则报错,如果子类有重写,则调用子类的

    • 对于重写方法,以下类型是不可以重写的
      • static : 方法直接属于类,能够公共调用
      • final : 常量,位于常量池,公共访问
      • private : 方法为私有变量,不可继承
  5. instanceof(类型转换): 引用类型,判断一个对象是什么类型,返回boolea类型,类与类关系判断

    Person p=new Student();
    bool=p instanceof Student;
    //判断左边,当不能直接强制类型转换时,会直接报错;
    当允许时,判断右边,查看实际对象能否强制对象转换,能:true,不能:false
    //类的强制类型转换:父类转化为子类
    
    • 编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

    • obj 操作数的类型必须是引用类型或空类型; 否则,会发生编译时错误。

    • 实现原理https://www.cnblogs.com/ysocean/p/8486500.html#_label6

      boolean result;
      if (obj == null) {
        result = false;
      } else {
        try {
            T temp = (T) obj; // checkcast
            result = true;
        } catch (ClassCastException e) {
            result = false;
        }
      }
      
posted @ 2021-11-12 14:49  烟雨断桥  阅读(27)  评论(0编辑  收藏  举报