zoukankan      html  css  js  c++  java
  • 重写原则用多态来解释

    1.子类方法的访问修饰符要大于或者等于父类要重写方法的范围

    class A{

    public void m(){}

    }

    class B extends A{

    void m(){}

    }

    这个时候子类的访问范围比父类小,我们姑且算它是对的进行反推

    A a =new B();//向上转型

    a.m();//a对象是由A类申明,就可以去调用A中的方法,m()在任意位置都可以访问。

    a.m();//调用方法的时候具体的执行看子类,就可以去调用B类中的m(),可以在本类或者同胞类访问,

    此时出现了矛盾就说明子类的访问权限修饰符要么等于或者大于父类。

    2.如果父类的返回值数据类型是引用数据类型,子类的引用数据类型要么和父类相等要么是父类的子类

    Class A{

    public void n(){}

    }

    Class B extends A{

    public void m(){}

     }

    Class c{

    public B m(){return null;}

    }

    Class D extends c{

    public A m(){return null;}

    }

    C c=new D();//向上转型

    B b=c.m(); //因为c对象是c类声明的,就可以去访问c类中的方法;调用完方法返回值是B类类型,就可以去访问B类中的方法

    A a=c.m(); //方法的具体执行看子类,去调用的是D类中的方法,调用完之后返回A类,就可以访问A类中的方法---但是这个时候多态的意思是声明靠父类所以可以调用父类中的方法,但是具体实现由子类完成,此时产生的问题是声明返回的是B类调用的方法中父类A中可能无法实现 所以A类中的方法接不住B类中的 ,所以还是要重写方法的返回类型子类方法的返回类型是父类被重写方法的子类或者同类。

  • 相关阅读:
    unity编辑器扩展
    unity给localRotation赋值
    ASp.net常用服务
    二叉树
    Photon Server类函数介绍
    线程间操作无效: 从不是创建控件的线程访问它的三种方法
    使用vs的输出窗口进行调试输出数据
    Bmob后端云之云数据库的使用
    软件设计的七大原则
    Unite Beijing 2018 参会简要分享
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11085446.html
Copyright © 2011-2022 走看看