• 学习OOP——三大特性之一“继承”的总结


    "僧问:不历僧只获法身,请师直指。师云:子承父业。"@-@/

    OOP三大基本特性之一“继承”,存在父类或接口与子类的关系,而判断谁是父类谁是子类在于关键词extends.

    对于子类来说,父类只能有一个,而父类下面可以有多个子类,子类可以继承父类的方法或者属性,必定涉及到当前对象与父类对象的区别。

    this表示在当前构造方法中调用其他的重载构造;而super表示在子类构造中调用父类的构造。

    而this和super必须位于当前构造方法的第一句,否则就会报错。

     

     尽管子类可以继承父类的方法与属性,但是也不是能完全继承的,以下三个属于不能继承的范畴:

      (1)私有的  privaate

      (2)构造方法 constuctor

      (3)非同包子类受保护类型 protected

    讲到了修饰符,顺便介绍一下四个基本修饰符的访问权限控制:

    其中public修饰符可以在所有类型中被访问;

    而protected只能在同包或者不同包的子类被访问;

    default只能在同包中被访问;

    private只能在同类中被访问。

    在父类与子类之间,存在自动类型的转换与强制类型的转换

      其中自动类型转换指的是父类引用指向子类的对象

    看一个简单的例子:

      Water为父类,Xiaoming为子类,Xiaoming的两种对象为drink 和 eat,当父类引用指向子类对象时,eat 并没有表现出来.

     

     

    这就是向上转型,父类的引用可以直接指向子类的对象,但是子类单独定义的其他方法会丢失,如子类中"eat watermelon"并没有输出。

    而向下转型,指的是将子类对象赋值给父类引用,再强行转回子类,这时子类定义的其他方法就不会丢失了。

     

      这里在向上转型的基础上作出了一点改变,利用instanceof进行强制转换就可以保证子类方法不会丢失。

        

  • 相关阅读:
    MADDPG官方代码实现
    安装moviepy
    单目摄像机测距
    Tensorboard那些事
    instanceof、isPrototype、Object.create的区别
    鼠标事件以及clientX、offsetX、screenX、pageX、x的区别
    JS中的位置和宽度:clientWidth、offsetWidth、scrollWidth等区别
    vue项目build报错的解决办法(ERROR in static/js/vendor.xxxxx.js from UglifyJs)
    onclick(fn)与addEventListener("click", fn)的区别
    第五篇
  • 原文地址:https://www.cnblogs.com/afeiiii/p/12977268.html
Copyright © 2020-2023  润新知