代码:
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());
}
}