内部类

HOW:基本使用

 1 /**
 2 *需求1:在Outer类中定义内部类Inner
 3 *需求2:Inner内定义一个vistOuter方法访问Outer的x属性
 4 *需求3:Outer内定义一个vist方法访问Inner的vistOuter方法
 5 */
 6 class Outer
 7 {
 8     String x="outer";
 9     //定义内部类
10     class Inner
11     {
12         String x="inner";
13         //内部类可以不创建外部类的对象而访问外部类的属性Outer.this.属性
14         void vistOuter(){
15             System.out.println("访问到的是:"+Outer.this.x);
16         }
17     }
18     //外部类不能直接访问内部类的方法,必须要先创建内部类的对象,通过该对象访问
19     void vist(){
20         //new Inner()看成一个对象,再.方法
21         new Inner().vistOuter();
22     }
23 }

注意事项

1.内部类与外部类的成员同级,所以内部类可以被private修饰!

2.内部类与外部类的成员同级,所以内部类可以访问外部类的成员变量,即使是private

3.如果一个内部类中有静态变量或者静态声明,那么它必须是静态内部类=》如果是静态内部类,那么:Outer.Inner.x或Outer.Inner.function()可以访问其静态成员或方法

4.静态类不能直接访问本类的成员或者方法:可以通过实例化之后再访问

 1 class Outer
 2 {
 3     static int x=5;
 4     //因为外部类中定义了静态成员,所以这里必须是静态内部类
 5     static class Inner
 6     {
 7         //本类非静态成员
 8         int x=1;
 9         //本类静态方法
10         static void vistOuter(){
11         System.out.println(Outer.x);
12         }
13     }
14 }
15 
16 class StaticNeiBu 
17 {
18     public static void main(String[] args) 
19     {
20         //调用静态内部类的静态方法:输出外部类静态成员变量
21         Outer.inner.vistOuter();
22         //访问静态内部类的非静态成员x
23         System.out.println(new Outer.Inner().x);
24     }
25 }

 

posted @ 2015-08-01 13:50  洱海  阅读(200)  评论(0编辑  收藏  举报
.First { margin: 10px 0; font-family: 'Microsoft Yahei'; text-align: left; padding: 6px 20px; color: #fff; background: #55895B; font-size: 20px; border-radius: 4px; clear: both; } .Second { margin: 10px 0; font-family: 'Microsoft Yahei'; padding: 6px 20px; background: #93C8A2; color: white; font-size: 18px; border-radius: 4px; clear: both; } .Third { margin: 10px 0; padding: 6px 20px; font-family: 'Microsoft Yahei'; margin: 15px 0; font-size: 16px; color: black; background: #C6EFD2; border-radius: 4px; clear: both; } .note { margin: 10px 0; padding: 15px 20px 15px 60px; background: #FCFAA9 url('http://images.cnblogs.com/cnblogs_com/libaoheng/305804/o_yellow-pin.png') no-repeat 20px 0; font-size: 15px; font-family: 'Microsoft Yahei'; box-shadow: 0 0 8px #aaa; clear: both; } .demo { text-align: left; padding: 6px 20px; overflow: auto; border-radius: 4px; background: orange; color: #fff; font-size: 16px; clear: both; } .cnblogs_Highlighter { border: solid 1px #ccc; clear: both; } .cnblogs_code { background: #EFFFF4; border: solid 0px #939393; font-size: 14px; clear: both; padding: 10px 20px; } .cnblogs_code pre { font-size: 14px; } .cnblogs_code span { font-family: Courier New; font-size: 14px; }