一、什么是静态内部类
和成员内部类一样,都是放在外部类的成员位置,但是!静态内部类有static修饰。(那不就是被static修饰的成员内部类吗...一旦被static修饰了,就叫做静态内部类)
二、特点
- 可以直接访问外部类的所有静态成员,包括私有的,但是不能直接访问非静态成员。
- 可以添加任意访问修饰符(private, protected, default, public),因为它的地位就是一个成员。
- 作用域:是它的外部类的整个类体。
1、静态内部类---访问--->外部类:
- 直接访问所有静态成员。
2、外部类---访问--->静态内部类:
- 创建对象再访问。(因为静态内部类中的say方法不是static方法)
3、外部其他类---访问--->静态内部类:
方式一:
这是因为该内部类是静态内部类(该类可以通过 外部类名.静态内部类名 的方式直接访问),同时静态内部类中的xxx变量是static类型,static变量随着类加载而加载,因此可以静态内部类.静态变量名的方式去访问。
package com.hspedu.Collection;
public class Collection01 {
public static void main(String[] args) {
System.out.println(A.mg.xxx); //直接用外部类名.静态内部类名.静态变量名。因为xxx变量是静态变量
}
}
class A{
public static class mg{
public static final int xxx = 1;
public static void hello(){
}
}
public void say(){
A.mg.hello(); //直接用外部类名.静态内部类名.方法名。因为hello方法是静态方法
}
}
方式二:
方式三:编写一个方法,可以返回静态内部类的对象实例。
4、外部类和静态内部类的成员重名
如果外部类和静态内部类的成员重名时,静态内部类访问的时候,默认遵循就近原则。如果想访问外部类的成员,则可以使用(外部类名.成员)去访问。