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修饰的,所以是类的一员。根据静态成员不能访问非静态成员的原则,静态内部类是不能访问外部类的非静态成员的