内部类
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 }