zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第十章-多态-静态函数

    一.

    介绍一下多态中,有静态函数的例子。

    (静态和动态的区别在哪儿?静态只能是所属类名来调用)

    编译运行的时候,我觉着应该出错。原因是method()是父类静态方法,只能是父类名来调用,这里显然不是的。

    DOS的结果存在,和我想像的不一样。而且输出的是父类的函数。

    怎么静态输出的是父类中的方法?不是覆盖么?

    上一节非静态的函数,为什么输出的是子类的函数,因为非静态必须是要依靠子类对象来调用。因此它依赖的是对象,它必须动态绑定到指定的对象上。到静态方法上就不是了。

    静态的函数是存放在方法区中的静态区,两个类一加载,它们就已经存在了。两个静态的show()都有自己所属,是固定的。类一加载就能直接调用,不需要对象,立刻就有所属了。(这说明什么?数据都是有所属的) 这是静态绑定的。

    非静态为什么是动态的,父类的子类有很多种,到底是哪个子类对象调用的,必须找到对应的对象。随着对象的变化,非静态函数所属也在变化,所以它是动态的。

    既然静态的已经不依赖于特定的对象了,那么哪种类型调用静态方法,就是用哪种类型的静态的方法。如果该类没有静态方法,还要执意调用,估计会出错。(new Zi()在这里就没什么作用了)

    而且new Zi()对象已经提升为了父类型了,那么肯定是调用父类型的静态方法。

    视频认为,静态方法不涉及多态性。对象的多态性,这里都没利用到对象,所以才会这么说。

    直接类名调用就可以了,没必要再去设计一个多态来调用静态方法。

    对于继承中,覆盖的理解还是不够深入,尤其在涉及到多态的时候,容易出错。

    在多态的成员变量,成员函数,静态函数三者的介绍中,成员变量,静态函数看的都是左边。成员函数比较特殊,编译看左边,运行看右边。因为非静态方法被覆盖了,具体运行哪一个,要看具体的对象。

    会过头来对之间谈论的程序进行一个梳理,分析

    调用的函数那一块,涉及地就是多态的知识点。USB和UPan是两个类型,都已经存在等号了,那说明这个对象多了一个类型。

    更为完善的写法就是加上一个判断,看是否插入了相应规则的外设。

    上图的例子讲的是接口的应用,规则,扩展,只不过里面涉及了多态的知识点。

  • 相关阅读:
    从Go语言编码角度解释实现简易区块链——打造公链
    CSAPP:位操作实现基本运算
    虚拟机Ubuntu系统无法连接网络解决方案
    CSAPP:逆向工程【二进制炸弹】
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    【Recorder.js+百度语音识别】全栈方案技术细节
    webpack4.0各个击破(5)—— Module篇
    webpack4.0各个击破(4)—— Javascript & splitChunk
    webpack4.0各个击破(3)—— Assets篇
    javascript基础修炼(4)——UMD规范的代码推演
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7830806.html
Copyright © 2011-2022 走看看