zoukankan      html  css  js  c++  java
  • Java学习记录-3.类的复用

    对类的复用主要有两种方式,组合与继承。

    组合

    在一个类中使用一个类。

    对于这些对象的初始化有四种方式:

    1.在定义域处,这样在构造器被调用之前就会被初始化。

    2.在构造器内。

    3.惰性初始化,既在使用这些对象的时候初始化。

    4.实例初始化。

    继承

    Java中任何一个对象都存在继承关系,哪怕没有指明继承的类,也会隐式地从标准根类Object进行继承。对于访问权限,即便是继承而来的子类,也需严格遵守规则,无法访问基类的private成员,包外也无法访问friendly成员。但如果必须要调用基类的private实例域,也可以定义一个get方法。子类的方法来自对基类的继承,对基类方法的覆盖和额外添加新方法。若要在子类中调用基类版本的方法,只需写为super.MethodName。

    对于构造器,无参数的积累构造器是自动调用的,无需手动调用,而若要指定某个有参数的构造器,则需使用super方法,例如,在子类中调用super(i)则会调用基类中有一个参数的构造器。需要注意的事,在子类构造器中指明使用的积累构造器是很重要的,要在第一时间内写出。

    对于重载方法,只要签名不同,在子类中重载方法就不会覆盖基类的方法,可以在子类中调用包括基类和子类在内的所有重载版本。

    对继承的初始化是由基类像子类逐层进行的。

    代理

    在其他类中将该类作为成员对象(就像组合),在创建方法的时候有选择的将该类的方法包含其中,使得新的类拥有该类的接口(就像继承)。

    在组合与继承之间选择

    组合意味着设计者想要使用它的一些个方法,这些组合类应该使用private修饰,但当组合类自身的的具体实现都隐藏了的时候,使用public也无妨,并且可以更好的展示这个类的组合情况,如engine类有一个start()方法,而car类则组合了engine类,则可以在car类内创建一个实例engine1,在拥有一个car类的实例car1时通过car1.engine1.start()来调用。

    继承则意味着想要将一个通用类特殊化,例如车类继承自交通工具类,而不是车类组合了一个交通工具类。

    更多应用

    同时调用组合与继承也是一种非常常用的方法。

    思想

    高层对象不应该依赖于低层对象,它们都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。

  • 相关阅读:
    lucene索引合并与增量索引
    Lucene全文搜索 分组,精确查找,模糊查找
    lucene3.6.1 经典案例 入门教程 (包含从文件中读取content)
    lucene特殊字符处理
    http://www.iteye.com/job/topic/1133159
    org.apache.lucene.queryParser.ParseException: Encountered "<EOF>" at line 1, column 0.
    浏览器查看和手动设置cookie的值
    HttpWebRequest 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    SqlServer 行转一列逗号隔开
    大批量delete 优化方案
  • 原文地址:https://www.cnblogs.com/liuzey/p/8796281.html
Copyright © 2011-2022 走看看