Java基础

Java编程思想笔记7.复用类

2018-11-09  本文已影响1人  卢卡斯哔哔哔

点击进入我的博客

复用代码是Java众多引人注目的功能之一,但要成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。

7.1 组合

组合语法

就是在当前类中产生现有类的对象。

toString()方法

每一个非基本类型的对象都有该方法,当编译器需要一个String但你只有一个对象时,该方法会自动调用。

初始化引用

编译器并不是简单的为每一个引用都创建对象,因为这回增加不必要的负担

  1. 在定义对象的时候初始化,这意味着在构造方法之前被调用。
  2. 在类的构造方法中。
  3. 就在正常使用这些对象之前——惰性初始化
  4. 使用实例初始化

7.2 继承

7.2.1 初始化基类

带参数的构造器

7.3 代理

public class Test {
    TestDemo demo = new TestDemo();
    // 代理
    public void func() {
        demo.func();
    }
}

class TestDemo {
    void func() {}
}

7.4 结合使用组合和继承

7.4.1 确保正确清理

7.4.2 名称屏蔽

7.5 在组合和继承间选择

组合和继承都允许在新的类中放置子对象,组合是显式地这样做,而继承是隐式地做。

继承很重要但是并不意味着我们需要常常用他,如何判断是否应该使用继承请参照两个标准:

  1. 如果是“is-a”的关系,那就使用继承。如果是“has-a”的关系,那就使用组合。
  2. 是否需要向上转型,如果必须向上转型则必须使用继承,否则应该慎重考虑

7.6 protected关键字

7.7 向上转型

7.8 final关键字

7.8.1 final数据

final变量
空白final
final参数

7.8.2 final方法

  1. 把方法锁定,禁止继承类修改它(即不会被重写)
  2. 在JavaSE5之前,使用final可以提高效率,但目前已过时
final和private关键字

7.8.3 final类

7.8.4 final的忠告

要考虑清楚!!!

7.9 初始化及类的加载

每个类的编译代码.class都存在于独立的文件中,该文件只在需要的使用程序代码时才会被加载。

  1. 按照父类到子类的顺序加载static变量
  2. 构造子类对象时,先构造父类对象。
public class Test extends TestParents {
    // (a) static属性
    static String staticProperty;

    // (b) 构造方法
    public Test() {
        System.out.println("Test constructor");
    }

    // (c) static代码块
    {
        staticProperty = print("Test static property");
        System.out.println("Test static");
    }
    
    // (d) 非static代码属性
    String property = print("Test property");

    public static void main(String[] args) {
        // (1):System.out.println(Test.staticProperty);
        // TestParents static property
        // null(因为static代码块中的代码要创建对象才执行)
        // (2):Test test = new Test();
        // TestParents static property
        // TestParents property
        // TestParents static
        // TestParents constructor
        // Test static property
        // Test static
        // Test property
        // Test constructor
    }
}

class TestParents {
    static String staticProperty = print("TestParents static property");

    String property = print("TestParents property");

    {
        System.out.println("TestParents static");
    }

    public TestParents() {
        System.out.println("TestParents constructor");
    }

    static String print(String str) {
        System.out.println(str);
        return str;
    }
}
静态代码块和静态变量
代码块(注意不是静态代码块)、构造方法、非static属性
public Test()
    {
        staticProperty = print("Test static property");
        System.out.println("Test static");
        property = print("Test property");
        System.out.println("Test constructor");
    }

7.10 总结

优先选择组合和代理,必要时才使用继承。

上一篇 下一篇

猜你喜欢

热点阅读