静态内部类特点:
1.使用static修饰的成员内部类是静态内部类
2.静态内部类和外部类没有任何关系,只是在生成类名和类定义时有影响。静态内部类可以看做是与外部类平级的类。使用方法与外部类平级的类完全相同。
3.创建静态内部类的实例使用 外部类名.内部类名 实例名 = new 外部类名.内部类名(参数)
静态内部类有以下限制:
1.静态内部类不能与外部类重名
2.静态内部类不能访问外部类的非静态的属性和方法。外部类不能够访问内部类的非静态属性和方法。
public class StaticInnerClass { public static void main(String[] args) { // TODO Auto-generated method stub Outer1.Inner1 inner = new Outer1.Inner1();//构造静态内部类对象 inner.inner(); System.out.println("*******************"); Outer1 outer = new Outer1(); outer.outer(); } } class Outer1{ private String name = "张三"; private int num1 = 1; private static int num3 = 100; public void outer() { System.out.println(name+" "+num1); Inner1 inner1 = new Inner1(); inner1.inner(); System.out.println(inner1.name);//可以调用静态内部类,需要创建对象 System.out.println(Inner1.num2); System.out.println(Inner1.num3); } public static class Inner1{ private String name = "李四"; private static int num2 = 2; private static int num3 = 99; public void inner() { System.out.println(name+" "+num2); //System.out.println(Outer1.this.name+" "+Outer1.this.num1); //静态内部类不能访问外部类的非静态成员 //outer(); //Outer1.this.outer(); System.out.println(num3); //System.out.println(Outer1.this.num3); System.out.println(Outer1.num3);//静态内部类调用外部类成员不用this.的方式,直接去掉 } } }