《Java编程思想》(笔记8)-- 多态

是决定花一段连续的时间把《Java编程思想》看一遍,看书怎么能不做笔记呢,明明知道自己有些地方看完肯定会忘掉的,所以想把每章的笔记重点放在博客上,与大家共享!

第八章 多态
多态的作用是消除类型之间的耦合关系

1.后期绑定

记得在第一章时就提到过自己之前不太理解的后期绑定,现在再看来,概念要明晰的多了。
首先,什么是绑定。其实就是一个方法里面调用了另一个方法。
其次,什么是前期绑定,后期绑定显然是相对于前期绑定而言的,在c语言中,在程序执行之前,我们就知道方法之前的绑定,这就是前期绑定。
然后,在java语言中,由于多态这个基本特性的出现,让前期绑定的实现变得不可操作,编译器在程序执行前只知道一个基类类型,调用哪个导出类(子类)是不可而知的。
最后,解决方案出来了:后期绑定–又称动态绑定,运行时绑定,顾名思义,在运行时根据对象的类型进行绑定。换句通俗的话说,编译器其实一直不知道对象的类型,但是这个方法调用机制能找到并调用正确的方法体。
静态方法不具有多态性

2.继承与清理

创建新对象的动作顺序,和清理回收的动作顺序相反。

当成员对象中存在其他一个或者多个对象共享的情况时,也许得使用 引用计数 来跟踪访问者共享对象的对象数量。

class Shared{
    private int refcount = 0;
    //跟踪创建的Shared的实例数量,为id提供数组
    //long型防止溢出
    private static long counter = 0;
    //final修饰id,是因为不希望值在对象生命周期中被改变
    private final long id = counter++;
    public Shared(){
        System.out.println("Creating " + this);
    }
    public void addRef(){
        refcount++;
    }
    protected void dispose(){
        if(--refcount == 0){
            System.out.println("Disposing " + this);
        }
    }
    public String toString(){
        return "Shared " + id;
    }
}

class Composing{
    private Shared shared;
    private static long counter = 0;
    private final long id = counter++;
    public Composing(Shared shared){
        System.out.println("Creating " + this);
        this.shared = shared;
        this.shared.addRef();
    }
    protected void dispose(){
        System.out.println("Disposing " + this);
        shared.dispose();
    }
    public String toString(){
        return "Composing " + id;
    }

}

public class ReferenceCounting {
    public static void main(String[] args) {
        Shared shared = new Shared();
        Composing[] composings = {
                new Composing(shared),
                new Composing(shared),
                new Composing(shared),
                new Composing(shared),
                new Composing(shared),
        };
        for (Composing c : composings){
            c.dispose();
        }
    }
}
//output:
/*
Creating Shared 0
Creating Composing 0
Creating Composing 1
Creating Composing 2
Creating Composing 3
Creating Composing 4
Disposing Composing 0
Disposing Composing 1
Disposing Composing 2
Disposing Composing 3
Disposing Composing 4
Disposing Shared 0
*/
祝进步

猜你喜欢

转载自blog.csdn.net/zhaohancsdn/article/details/88744957