第七章:复用类

来源:互联网 发布:达梦数据库下载网盘 编辑:程序博客网 时间:2024/06/07 02:13
复用代码是Java中众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复杂代码并对之加以改变是不够的,它还要能够做更多的事。
继承和组合是利用现有的类来创建出新的类,提高代码复用。组合模式在设计模式中运用到更多。

1.组合

只需将对象的引用放进新类即可,有点和继承相似。
package com.myboy.refe;import com.myboy.generic.Test3;class TestDemo{public TestDemo(){System.out.println("TestDemo()");}@Overridepublic String toString() {return "toString()";}}public class Test4  {  public Test4(){  System.out.println("Test4()");  }  private TestDemo demo=new TestDemo();//无法阻止自动初始化,第六章初始化知识          /**   * private TestDemo demo;--->此时没有自动初始化.   */  @Overridepublic String toString() {return "demo:"+demo;//组合,直接在新类中对引用的类进行调用}      public static void main(String[] args) {      Test4 test=new Test4();      System.out.println(test);}     /**      * out  :TestDemo()                Test4()                toString()      *       */}

2.继承语法

继承是所有OOP语言和Java语言不可缺少的组成部分。在继承中,父类所拥有能访问的权限的属性,方法都能被子类所看见。创建一个类时,总是在继承(隐式的继承Object类)。
在继承中,对基类子对象的初始化也是至关重要的。构建的过程是从基类"向外扩展"
package com.myboy.extendstest;class Test3{public Test3(){System.out.println("Test3()");}}class Test2 extends Test3{public Test2(){System.out.println("Test2()");}}public class Test1 extends Test2 {public Test1(){System.out.println("Test1()");}public static void main(String[] args) {Test1 t1=new Test1();}    /**     * out:Test3();     *     Test2();     *     Test1();     */}

3.代理(在设计模式中很常见)

第三种关系被称为代理,Java中并没有提供对它的直接支持。继承和组合的"中庸之道".
因为我们将一个成员对象置于所要构造的类中(就像组合),但是在新类中我们暴露了该成员对象的所有方法(就像继承,但是比继承更厉害--"能直接调用该对象的私有属性")

4.在论protected关键字

在理想世界里,仅靠关键字private就能实现了。但在实际项目中,经常会想要把某些事物尽可能的隐藏起来,但仍允许导出类(子类)可以使用。
protected 关键字:它指明:就客户而言,它是private的,但是对于其他基于子类的导出类和其他位于同一个包的类,他却是可以访问的。(protected提供了包级访问权限)。

5.向上转型

"为新的类方法"并不是继承技术中最重要的方面,其最重要的方面是表现新类(导出类)和基类之间的关系。这种关系是"导出类是基类的一种类型"

我真的需要向上转型吗????????(如何选择继承和组合)
原创粉丝点击