java 内部类复习

  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 }

 

posted @ 2014-07-02 01:11  慎初  阅读(203)  评论(0编辑  收藏  举报