java(三十)【面向对象】静态内部类

一:静态内部类

当内部类在静态成员的位置上,就可以被成员修饰符所修饰。比如private:将内部类在外部类中进行封装,static:内部类就具备了static的特性。

当内部类被static修饰后,只能直接访问外部内中的static成员,出现了访问局限。

在外部其他类中,如何直接访问static内部类中的非静态成员呢?

new outer.neibu().function();

 1 class outer{
 2     static int x=9;
 3     static class neibu{      //静态内部类
 4         void function(){ //非静态成员
 5             System.out.println(x);
 6         }
 7     }
 8 }
 9 public class jingtaineibulei {
10     public static void main(String[] args) {
11         new outer.neibu().function();
12     }
13 }
View Code

结果:9

在外部其他类中,如何直接访问static内部类中的静态成员呢?

outer.neibu.function();

 1 class outer{
 2     static int x=9;
 3     static class neibu{      //静态内部类
 4         static void function(){ //静态成员
 5             System.out.println(x);
 6         }
 7     }
 8 }
 9 public class jingtaineibulei {
10     public static void main(String[] args) {
11         outer.neibu.function();
12     }
13 }
View Code

结果:9

注意点一:当内部类中定义了静态成员,该内部类必须是static的

 1 class outer{
 2     static int x=9;
 3     class neibu{      
 4         static void function(){ 
 5             System.out.println(x);
 6         }
 7     }
 8 }
 9 public class jingtaineibulei {
10     public static void main(String[] args) {
11     }
12 }
13 //结果:编译错误,因为内部类中定义了static成员,内部类不是static
View Code

注意点二:当外部类中的静态方法访问内部类时,内部类也必须是static的

 1 class outer{
 2     private static int x=9;
 3     static class neibu{      
 4         static void function(){ 
 5             System.out.println(x);
 6         }
 7     }
 8     static class inner2{
 9         void show(){
10             System.out.println("inner2 show");
11         }
12     }
13     public static void methon() {
14         new inner2().show();
15     }
16 }
17 public class jingtaineibulei {
18     public static void main(String[] args) {
19         outer.methon();
20     }
21 }
View Code

结果:inner2 show

 

posted @ 2016-05-30 14:20  花花妹子。  阅读(176)  评论(0)    收藏  举报