一个复杂的 Java 接口嵌套程序

代码:

class A {
    // B:包访问权限
    interface B {
        // 接口中默认的权限都是 public,即使你不声明
        void f();
    }

    public class BImpl implements B {
        public void f() {}
    }

    private class BImpl2 implements B {
        public void f() {}
    }
    // C:public 访问权限
    public interface C {
        // 此处的 public 声明是多余的
        public void f();
    }

    class CImpl implements C {
        public void f() {}
    }

    private class CImpl2 implements C {
        public void f() {}
    }
    // D:private 访问权限
    private interface D {
        void f();
    }

    private class DImpl implements D {
        public void f() {}
    }

    public class DImpl2 implements D {
        public void f() {}
    }

    public D getD() {
        return new DImpl2();
    }

    private D dRef;
    public void receiveD(D d) {
        dRef = d;
        dRef.f();
    }
}

interface E {
    interface G {
        void f();
    }

    // 接口中的接口默认都是 public 权限
    public interface H {
        void f();
    }

    void g();

    // 接口中不能定义 private 权限的接口
    // private interface I {}
}

public class NestingInterfaces {

    public class BImpl implements A.B {
        public void f() {}
    }

    class CImpl implements A.C {
        public void f() {}
    }

    // 不能实现私有接口
    /*class DImpl implements A.D {
        public void f() {}
    }*/

    class EImpl implements E {
        public void g() {}
    }

    class EImpl2 implements E {
        public void g() {}
        class EG implements E.G {
            public void f() {}
        }
    }

    class EGImpl implements E.G {
        public void f() {}
    }

    public static void main(String[] args) {
        A a = new A();
        // 不能访问类的私有接口
        // A.D = a.getD();
        // DImpl2 是一个 D,因此也不能返回
        // A.DImpl2 = a.getD();
        // DImpl2 是一个 D,因此也不能访问相应的方法
        // a.getD().f();
        A a2 = new A();
        // 只有这样做!!!
        a2.receiveD(a.getD());
    }

}

猜你喜欢

转载自blog.csdn.net/qq_34074510/article/details/83857757
今日推荐