《thinking in java》 接口与内部类

书本上的例子

 

 

改编后的。

 

复制代码
 1 package test2;
 2 
 3 class A{
 4     interface B{void f();}
 5     public class BImp implements B{public void f(){}}
 6     private class BImp2 implements B{public void f(){}}
 7     
 8     public interface C{void f();}
 9     class CImp implements C{public void f(){}}
10     private class CImp2 implements C{public void f(){}}
11     
12     private interface D{void f();}
13     private class DImp implements D{public void f(){}}
14     public class DImp2 implements D{public void f(){}}
15     
16     public D getD(){return new DImp2();}
17     private D dRef;
18     public void receiveD(D d){dRef=d;dRef.f();}    
19     
20 }
21 interface E{
22     interface G{void f();}
23     
24     public interface H{void f();}
25     void g();
26 }
27 public class NestingInterfaces {
28 
29     public class BImp implements A.B{public void f(){}}
30     class CImp implements A.C{public void f(){}}
31     
32 //    The type A.D is not visible
33 //    class DImp implements A.D{public void f(){}}
34     
35     class EImp implements E{public void g(){}}
36     class EGimp implements E.G{public void f(){}}
37     
38     class EImp2 implements E{
39         public void g(){}
40         class EG implements E.G{public void f(){}}
41     }
42     
43     public static void main(String[] args) {
44         A a=new A();
45         
46         //编译器在A.D处报错:The type A.D is not visible
47 //        A.D ad=a.getD();
48         
49         //编译器在 a.getD() 处报错:Type mismatch: cannot convert from A.D to A.DImp2
50 //        A.DImp2 di2=a.getD();  
51         
52         A.DImp2 di2=(A.DImp2)a.getD();
53         System.out.println(di2.getClass().getName());//test2.A$DImp2
54          
55         //The type A.D is not visible
56 //        a.getD().f();
57         
58         ((A.DImp2)a.getD()).f();
59         
60         A a2=new A();
61         a2.receiveD(a.getD());
62     }
63     
64 }
复制代码

可以顺利运行。

PS:编译器识别代码总是从左到右,从上到下,一步步进行的。至于代码的运行逻辑,那是识别之后的事情。

posted @   java资料收集  阅读(205)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示