买了Thinking In Java 这本书,应该有光盘啊.里面都给你做出来了,
那个程序多标准啊.怎么还要做啊...或者去www.Bruce.com下嘛

解决方案 »

  1.   

    interface U {
        void u1();    void u2();    void u3();
    }
    class A11 {
        int i = 1;    void incr() {
    i++;
        }
        U getAU() {
    return new U() {
        public void u1() {
                    System.out.println("u1()");
        }
        
        public void u2() {
    System.out.println("u2()");
        }     public void u3() {
    System.out.println(i);
    incr();
        }
    };
        } 
    }
    class E27_B {
        U[] us;
        int next = 0;    E27_B(int size) {
    us = new U[size];
        }    void addAU(U u) {
    if (next < us.length) {
        us[next] = u;
        next++;
    }
        }    void removeAU(int number) {
    if (number >= 0 && number < us.length) {
        us[number] = null;
    }
        }    void callAll() {
    for (int i = 0; i < us.length; i++) {
        us[i].u1();
        us[i].u2();
        us[i].u3();
    }
        }    public static void main(String[] args) {
    A11 a11 = new A11();
    E27_B b = new E27_B(10); for (int i = 0; i < 10; i++) {
        b.addAU(a11.getAU());
    }
            b.callAll();
    System.out.println(a11.i);
    b.us[0].u3();
    System.out.println(a11.i);
    b.removeAU(0);
    System.out.println(b.us[0]);
    System.out.println(b.us[1]);
        }
    }
      

  2.   

    楼上的是正确答案。
    在class All的getAU()函数中,返回一个匿名inner class实现interface U.
    在class E27_B中addAU(U u)即题目的第一个函数;void removeAU(int number) 即题目的第二个函数;void callAll() 即题目的第三个函数。
    main中的b.addAU(a11.getAU());即回调all对象。