zoukankan      html  css  js  c++  java
  • 第七章 类复用

    一、组合(has-a)

    二、继承(is-a)

    (1)初始化子类

    如果父类的构造方法是带参数的,而且没有无参数的构造方法,那么在子类的构造方法中必须显式地调用父类的构造方法。

    如果父类的构造方法是无参数的,那么在子类中写不写都可以,不写的话会隐式地调用。

    三、代理

    四、组合与继承结合

    (1)确保正确的清理

      你并不清楚垃圾收集器合适将会调用,或者它是否被调用。因此你想要某个类清理一些东西,就必须显示地编写一个特殊的方法来做这件事,并确保客户端程序员知晓他们必须调用这个方法。finally

    (2)名称屏蔽

      重载机制。@override:防止不想重载时意外重载

    五、protected关键字

    六、final关键字

    (1)数据

      基本类型,不变的是值。引用类型,不变的是引用,值是可以修改的。

    (2)修饰类

      不能被继承

      final类中的所有的方法都隐式指定为是final的。

    (3)方法

      1.不能被重写

      2.效率,在Java的早期,如果将一个方法指明为final,就是同意编译器将针对该方法的所有调用都转为内嵌调用(不推荐使用、jvm会自己优化

        有final: 没有虚函数表,直接调用,最快
        无final: 普通虚函数,那么正常速度,中间
        有final子类:因为没有虚函数表,需要转换成父类,较慢
        无final子类: 因为虚函数,从虚函数表找父类的getName,最慢

        当然虚函数表的描述是有一定限制的,比如HotSpot VM确实是有为Java类生成vtable的,但是

        其他jvm虚拟机不一定就有,但是处理虚函数的方法基本一致,我们可以统一理解

    补:在最近的Java版本中,虚拟机(特别是hotspot技术)可以探测到这些情况,并优化去掉这些效率反而降低的额外的内嵌调用,因此不再需要使用final方法来进行优化了。

      

      final与private

        类中所有的private方法都隐式地指定为是final。由于无法取用private方法,所以也就无法重写。可以对private方法添加final修饰符,但是没有意义。

        混淆:如果你试图重写一个private方法(隐式final),编译期不会报错。

  • 相关阅读:
    linux的软连接和硬连接
    各种Python简单功能代码
    《财报就像一本故事书》刘顺仁(二) ——财务报表
    Atitit .h5文件上传 v3
    Atitti. 语法树AST、后缀表达式、DAG、三地址代码
    Atitit.在线充值功能的设计
    Atitit。数据库 安全性 重要敏感数据加密存储解决方案
    atitit.数据验证db数据库数据验证约束
    Atitit.提升电子商务安全性 在线充值功能安全方面的设计
    Atitit.antlr实现词法分析
  • 原文地址:https://www.cnblogs.com/jswang/p/7792018.html
Copyright © 2011-2022 走看看