静态内部类
StaticInnerClass01.java
说明:静态内部类是定义在外部类的成员位置,并且有static修饰
- 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员。
- 可以添加任意访问修饰符(public.protected、默认、private),因为它的地位就是一个成员。
- 作用域:同其他的成员,为整个类体。
- 静态内部类 —> 访问 —> 外部类(比如:静态属性)
访问方式:直接访问所有静态成员 - 外部类 —> 访问 —> 静态内部类
访问方式:创建对象,再访问【案例a】 - 外部其他类 —> 访问 —> 静态内部类
三种方式【案例b】 - 如果外部类和静态内部类的成员重名时,静态内部类访问的时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.成员)去访问。这里不用加this。
【案例a】
外部类Outer10 中的visitInner10()方法
class Outer10 {private int n1 = 10;private static String name = "haha";//1. 放在外部类的成员位置//2.使用static修饰static class Inner10 {public void say() {// 可以直接访问外部类的所有静态成员,包含私有的,// 但不能直接访问非静态成员。System.out.println(name);}}public void visitInner10() {Inner10 inner10 = new Inner10();inner10.say();}
}
【案例b】
方法一
直接创建对象:类似A a = new A()
Outer10.Inner10 inner10 = new Outer10.Inner10();
new Outer10.Inner10()
因为这是【静态】内部类,所以可以直接用类名访问
前提是满足访问权限
方法二
在外部类 Outer10 中编写一个方法,返回静态内部类的对象
【main】Outer10 outertmp = new Outer10();Outer10.Inner10 innertmp = outertmp.getInner10();innertmp.say();
class Outer10 {static class Inner10 {}public Inner10 getInner10() {return new Inner10();}
}
方法三
编写一个【静态】方法,返回静态内部类的对象
静态方法getInner10_可以访问静态成员Inner10
class Outer10 {static class Inner10 {}public static Inner10 getInner10_() {return new Inner10();}
}