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 }
结果: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 }
结果: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
注意点二:当外部类中的静态方法访问内部类时,内部类也必须是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 }
结果:inner2 show


浙公网安备 33010602011771号