创建一个带三个方法的Interface U。创建一个带有“用创建匿名内部类方式返回U的引用的”方法的类A。再创建一个包含一个U的数组的类B。这个B应当有一个能将U的引用存进数组的方法,以及一个能将数组中的引用(根据方法的参数)设成null的方法,此外它还要有一个能遍历数组,并且能调用U的方法的方法。用main()创建一组A对象以及一个B对象。用由A对象返回的U的引用填满B。用B来回调A对象。从B里面删除掉一些U的引用。

解决方案 »

  1.   

    // 创建一个带三个方法的Interface   U
    interface U {
    void method1();
    void method2();
    void method3();
    }// 创建一个带有“用创建匿名内部类方式返回U的引用的”方法的类A
    class A
    {
    U returnU() {
    U uImpl = new U() {
    public void method1() {
    // 实现代码
    } public void method2() {
    // 实现代码
    } public void method3() {
    // 实现代码
    }
    }; return uImpl;
    }
    };// 再创建一个包含一个U的数组的类B
    class B
    {
    U[] us; // 这个B应当有一个能将U的引用存进数组的方法
    void setUs(int i, U uImpl) {
    us[i] = uImpl;
    } void setUs(U[] us) {
    this.us = us;
    }

    // 以及一个能将数组中的引用(根据方法的参数)设成null的方法
    void setNull(int i) {
    us[i] = null;
    } // 另外它还要有一个能遍历数组,并且能调用U的方法的方法
    void traverse() {
    for (int i = 0; i < us.length; i++) {
    us[i].method1();
    us[i].method2();
    us[i].method3();
    }
    }
    };public class  Main
    {
    public static void main(String[] args) 
    {
    // 创建一个长度为5的A的数组
    A[] as = new A[5];
    U[] us = new U[5];
    for (int i = 0; i < as.length; i++) {
    as[i] = new A();
    us[i] = as[i].returnU();
    }

    B b = new B();
    // 用由A对象返回的U的引用填满B
    b.setUs(us); // 用B来回调A对象(回调我不会,此处未实现) // 从B里面删除掉一些U的引用
    b.setNull(0);
    b.setNull(1);
    }
    }