1 /**
2 * 内部类详解
3 *
4 * @author shao
5 *
6 */
7 public class InnerClass {
8
9 public static void main(String[] args) {
10 Man p = new Man("丽丽");
11 Man.Son son = p.new Son("小丽丽");
12 son.play();
13 Man.Girl girl = new Man.Girl();
14 girl.play();
15 p.work();
16 p.getMoney().fun();
17 }
18
19 }
20
21 class Man {
22
23 private String wife;
24 private String house = "房子";
25 private static String girlOwn = "嫁妆是必须的";
26
27 public Man(String wife) {
28 this.wife = wife;
29 }
30
31 public void work() {
32 // 从不向儿子索取
33 // System.out.println("工作"+toy);
34
35 // 局部内部类,与局部变量类似 ,用法与成员内部类一样
36 class Sleep {
37 public String sleep() {
38 return "该睡觉了~~~~";
39 }
40 }
41
42 System.out.println(new Sleep().sleep());
43
44 }
45
46 public static String fun() {
47 return "天天上班挣钱";
48 }
49
50 public Money getMoney() {
51
52 /*
53 * 匿名内部类是一种特殊的局部内部类,没有类名,只适合一次并且不需要多次创建的类。 匿名内部类是唯一一种没有构造方法的类。
54 * 匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写,在android开发中经常用到。事件监听等 。
55 */
56 return new Money() {
57
58 @Override
59 public void fun() {
60 System.out.println("就涨过一次工资。。。。哎");
61 }
62
63 };
64 }
65
66 /*
67 * 非静态内部类,可以调用引用类的成员变量,但引用类,不可以调用 内部 类的成员变量。
68 */
69 class Son {
70
71 private String wife;
72 private String toy;
73
74 public Son(String wife) {
75 this.wife = wife;
76 }
77
78 public void play() {
79 System.out.println(wife + ",是我妈咪的儿媳妇~");
80 System.out.println(Man.this.wife + ",是我妈咪");
81 System.out.println("我是儿子,可以继承资产..." + house + "--哈哈——");
82 System.out.println(fun() + "也是我的钱。");
83 }
84 }
85
86 /*
87 * 当一个静态内部类存在,并不一定存在对应 的外部类对象 可以看成外部类(引有类)的一个静态成员
88 */
89 static class Girl {
90
91 private String dress;
92
93 public void play() {
94
95 // 静态内部类不可以访问外部类的成员变量
96 // System.out.println("我也不需要房子"+house);
97 System.out.println(girlOwn + ",这个再不能给哥哥了~");
98
99 }
100 }
101
102 public interface Money {
103 void fun();
104 }
105 }