zoukankan      html  css  js  c++  java
  • 复用类

    组合类

    组合语法

    组合语法的意思: 在新的类中,是由现有的类组合形成的。
    继承: 在现有的类的基础上增添内容。

    1. 用定义处初始化
    2. 在构造器中进行初始化
    3. 在方法中,快使用这个成员变量之前进行初始化操作。
    4. 用创建实例对象进行初始化。

    继承语法

    这一内容里面讲述了基本的extends的基本语法, 可是主要字数是去描述, main函数作为类的入口, java 类名的时候会自动运行, 且平时没注意的static 参数对main方法也有效,会变成静态的, 使得即使是包访问限制也是可以进行静态调用的。

    • 初始化基类
      意思是说,继承后,导出类会包含基类, 基类会被包含在导出类的内部。而你如果用组合的方法进行,也就是基类用new的方式进行, 它则是在导出类的外部-》因为创建对象,是在堆中进行创建, 组合的导出类中,只会用基类的引用。
      构建类的过程是从基类向外扩散的,就是说基类先于导出类初始化。所以也就不存在导出类访问基类不存在的问题。
      没有默认的基类构造器(基类的无参构造器),因为子类构造器,jvm会自动调用父类的默认基类构造器,如果没有我们就得显式地用super进行调用

    代理

    代理具有控制性, 代理是中设计模式。而继承地方式, 当有些方法不适合暴露给用户的时候,继承就不太合适了。

    组合使用组合和继承

    在生命周期内必须清理资源的要求, 常用finally进行必须的清理, 比如关流的时候, 关闭数据库连接的时候

    • 名称的屏蔽
      是指c++重写的时候会屏蔽父类的方法,这样做的好处是不会在改变实现,而方法签名,和返回值相同的情况下-》重载进行混淆。而Java抛弃这种机制,允许基类的重载,-》 如果重写用override进行覆盖

    在组合与继承之间选择

    在文中,作者对于组合和继承的选择,源自于,is-a和has-a的判断. 中文去理解就是a是b的一种, has-a则是a是b中众多部分的一部分。 换作数学理解就是, 当a中有B中所需要的很多功能的时候用继承, 反之则用组合。

    protected关键字

    我们用private进行都细节的封装, 但有些功能需要让子类进行访问就可以用protected, 但相对于子类还是有些方法限制其访问(为了安全), 所以private大多时候还是得相辅相成才行。

    向上转型

    • 向上转型, 就是某一方法要求参数父类,但可以接受子类的引用, 且在方法中调用父类方法的时候变成调用子类的方法。
      从中我们该认识到, 子类对象也是一种父类对象
    • 向上转型名字的由来:
      是由于传统类继承图是将根置于顶端, 然后随着继承关系逐渐向下的。所以将子类的转型成父类称为向上转型。

    final关键字

    • final常用于:
      不希望运行时候被初始化的值,但又不希望客户端程序员对他进行改变。
      或者一开始就是一个不用改变的常量

    +final加在非基本数据类型的引用前面则会让引用无法指向其他对象, 但这不意味着该引用一成不变,毕竟改变不了引用, 但是我们可以改变对象。

    • final在定义的时候不赋值, 但编译器会确保在调用前赋值,不然无法进行编译。这个例子就是:给final修饰的数加随机数, 对象地址不变, 这是一种不变的特性, 但是数值确实改变的。
    • final在参数后面加的时候, 你可以读它,使用它但是不能改变它。
    • final方法, 又两种好处, 防止继承的子类修改这个方法, 第二种是, 效率问题, 编译器会将调用这个方法的所有调用改变为内嵌调用, 这样速度很快。
      private 修饰方法, 那么将不能调用种方法, final修饰方法是为了不能修改, 那么private修饰的方法都不能调用了, 还能修改吗?

    初始化及类的加载

    • c语言中的加载顺序是:
      程序作为启动的一部分立即加载,然后初始化,运行
      Java语言中加载是通过类去加载的, 所以只会在第一次创建对象的时候加载
      访问顺序是通过判断是否有extends, 因为有, 所以要先递归加载基类,然后再从最上层的基类开始加载static的成员变量进行初始化,初始化由基类到导出类, 类加载完后,对象可以被创建了, 首先所有默认类型被设为默认值,引用被设为null---通过将内存设为二进制0值而一举生成的。然后是调用构造器, 也是从基类开始调用,然后是最后的导出类。
    总结

    组合是当作底层实现来用, 而继承则是复用基类的接口。
    继承可以向上转型为基类, 这对多态至关重要。

  • 相关阅读:
    自己编译GCC(compile gcc from source)
    sphinx PDF 中文
    rst2pdf 中文
    Pandoc PDF 中文
    Linux XMind
    asp.net 邮件发送类
    asp.net 音乐播放器
    使用X-UA-Compatible来设置IE浏览器兼容模式
    asp.net(c#)网页跳转七种方法小结
    C#中HashTable的用法
  • 原文地址:https://www.cnblogs.com/jwlxtf/p/7918392.html
Copyright © 2011-2022 走看看