嵌套接口-接口

这是一个很绕的例子,没有用过,但是说不定以后会用到

class A {
	interface B {
		void f();
	}
	public class Bimp implements B {
		public void f() {};
	}
	private class Bimp2 implements B {
		public void f() {};
	}
	
	public interface C {
		void f();
	}
	class Cimp implements C {
		public void f() {}
	}
	private class Cimp2 implements C {
		public void f() {}
	}
	
	private interface D {
		void f();
	}
	private class Dimp implements D {
		public void f() {}
	}
	public class Dimp2 implements D {
		public void f() {}
	}
	
	public D getD() { return new Dimp2(); }
	private D dRef;
	public void receiveD(D d) {
		dRef = d;
		dRef.f();
	}
}

interface E {
	interface G {
		void f();
	}
	//这里不加修饰也是public 但是不能是private的
	public interface H {
		void f();
	}
	void g();
}

public class NestingInterfaces {
	
	public class Bimp implements A.B {
		public void f() { System.out.println("Bimp A.B f()"); }
	}
	class Cimp implements A.C {
		public void f() {}
	}
	//因为A.D是private的所有不能向上面一样实现
	//class Cimp implements A.D
	class Eimp implements E {
		public void g() {}
	}
	class DGimp implements E.G {
		public void f() {}
	}
	class Eimp2 implements E {
		public void g() {}
		class EG implements E.G {
			public void f() {}
		}
	}
	
	public static void main(String[] args) {
		A a = new A();

                //A.Dimp2 ad = a.getD();//: cannot convert from A.D to A.Dimp2
                //A.Dimp2 dip2 = a.getD();//cannot convert from A.D to A.Dimp2
		//a.getD().f();//The type A.D is not visible
		A a2 = new A();
		a2.receiveD(a.getD());
	}
}

这个getD方法有点意思,代理中尝试了各种方式调用这个getD都不行。这个问题域private接口相关(D是private的):getD是一个返回对private接口的引用的public方法。在main中只有一中方法成功了,那就是把getD的返回值交给有权使用它的对象。因为receivdD这个方式有权利使用D的对象,但是main中其他引用都没有权利。

从Eimp implements E可以发现,实现一个接口并不需要是实现嵌套在其内部的任何接口。

还有private接口不能在定义它的类之外被实现


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值