《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:编译器识别代码总是从左到右,从上到下,一步步进行的。至于代码的运行逻辑,那是识别之后的事情。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决