wordpress网站百度收录首页,鞍山信息网便民信息,衡水做外贸网站建设,拍卖 网站 建设创建内部类的典型的方式是在一个方法体的里面创建#xff0c;局部内部类不能有访问说明符#xff0c;因为它不是外围类的一部分#xff0c;但是它可以访问当前代码块内的常量,以及此外围类的所有成员。下面的例子对局部内部类与匿名内部类的创建进行了比较。 具体代码实现局部内部类不能有访问说明符因为它不是外围类的一部分但是它可以访问当前代码块内的常量,以及此外围类的所有成员。下面的例子对局部内部类与匿名内部类的创建进行了比较。 具体代码实现 1 package thinking.in.java.demo;2 3 //定义一个接口4 interface Counter {5 int next();6 }7 8 // 主类LocalInnerClass9 public class LocalInnerClass {
10 // 定义一个计数标记count;
11 private int count 0;
12
13 // 使用局部内部类
14 Counter getCounter(final String name) {
15 class LocalCounter implements Counter {
16 public LocalCounter() {
17 System.out.println(LocalCount());
18 }
19
20 public int next() {
21 System.out.print(name:);
22 return count;
23 }
24 }
25 // 局部内部类和匿名内部类最大的不同之处局部内部类可以返回不止一个内部类的对象
26 // 与下面的匿名内部类的代码形成鲜明对比
27 return new LocalCounter();
28 }
29
30 // 使用匿名内部类
31 Counter getCounter2(final String name) {
32 return new Counter() {
33 {
34 System.out.println(Counter);
35 }
36
37 Override
38 public int next() {
39 System.out.print(name:);
40 return count;
41 }
42 };
43 }
44
45 /**
46 * param args
47 */
48 public static void main(String[] args) {
49 LocalInnerClass lic new LocalInnerClass();
50 // 局部内部类
51 Counter c1 lic.getCounter(Local inner);
52 // 匿名内部类
53 Counter c2 lic.getCounter2(Anonymous inner);
54 for (int i 0; i 5; i) {
55 System.out.println(c1.next());
56 }
57 for (int j 0; j 5; j) {
58 System.out.println(c2.next());
59 }
60 }
61
62 } 运行结果 LocalCount()
Counter
Local inner:0
Local inner:1
Local inner:2
Local inner:3
Local inner:4
Anonymous inner:5
Anonymous inner:6
Anonymous inner:7
Anonymous inner:8
Anonymous inner:9 在代码中Counter返回的是序列中的下一个值。我们分别使用局部内部类和匿名内部类是实现了这个功能它们具有相同的行为和方法。既然局部内部类的名字在方法外是不可见的那为什么我们仍然使用局部内部类而不是匿名内部类呢唯一的理由是我们需要一个已经命名的构造器或者需要重载构造器而匿名内部类只能用于实例的初始化所以使用局部内部类而不使用匿名内部类的另一个理由是需要不止一个内部类对象。 转载于:https://www.cnblogs.com/ysw-go/p/5430218.html