public class Outer { public String name = "MAH"; public class Inner //非静态内部类 { public int Num = 4;//非静态内部类的Feild public void acc() { System.out.println(name);//非静态内部类可以直接访问外部类的成员 } } public void accessInner() { System.out.println("内部类的Num值是:" + new Inner().Num); } public static void main(String[] args) { Outer b = new Outer(); System.out.println("这是外部类的主方法" + b.name); b.accessInner(); //外部类通过调用accessInner方法产生一个非静态内部类的实例 } }
非静态内部类可以直接访问外部类的成员,而外部类不可以直接访问非静态内部类的成员
原因:
非静态内部类没有被static修饰,所以这个内部类就不是类相关的,也就说不是类的,是实例的,
但是我们非静态内部类要创建实例,外部类一定会先创建一个外部类的实例,非静态内部类的实例就是寄生在外部类的实例上的。所以,非静态内部类的实例可以直接访问外部类的成员,因为,外部类已经创建一个实例的,内部类保留了外部类创建的实例的引用
静态内部类不一样!
静态内部类是被static修饰的,所以是类的一员。根据静态成员不能访问非静态成员的原则,静态内部类是不能访问外部类的非静态成员的