[20-05-17][Thinking in Java 22]Java Inner Class 6 - Anonymous Inner Class 1

1 package test_15_1;
2 
3 public interface Contents {
4 
5     int value();
6 }
 1 package test_15_1;
 2 
 3 public class Wrapping {
 4 
 5     private int i;
 6 
 7     public Wrapping(int x) {
 8         i = x;
 9     }
10 
11     public int value() {
12         return i;
13     }
14 }
 1 package test_15_1;
 2 
 3 public class Outer {
 4 
 5     public Contents contents() {
 6         // 创建一个继承自Contents的匿名类的对象,通过new表达式返回的引用被自动向上转型为Contents的引用
 7         return new Contents() {
 8             private int i = 1;
 9             
10             @Override
11             public int value() {
12                 return i;
13             }
14         }; // 必须有分号,表示return表达式结束
15     }
16 
17     public Wrapping wrapping(int x) {
18         // 如果需要一个带参的构造器,只需要传递适当的参数给基类的构造器即可
19         // 尽管Wrapping只是一个具有具体实现的普通类,但还是能被导出类当作公共“接口”使用
20         return new Wrapping(x) {
21 
22             @Override
23             public int value() {
24                 return super.value() * 100;
25             }
26         };
27     }
28 
29     public static void main(String[] args) {
30         Outer o = new Outer();
31         Contents c = o.contents();
32         Wrapping w = o.wrapping(10);
33 
34         System.out.println(c.value());
35         System.out.println(w.value());
36     }
37 }

猜你喜欢

转载自www.cnblogs.com/mirai3usi9/p/12905290.html