作为刚入门Java的小白,这两天看到内部类,这里做一个总结,若有错误,欢迎指正~
  内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。
  内部类分为: 成员内部类、局部内部类、静态嵌套类、匿名内部类 。
  1.成员内部类
  成员内部类是普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:
  class Outter {
  private int age = 12;
  class Inner {
  private int age = 13;
  public void print() {
  int age = 14;
  System.out.println("局部变量:" + age);
  System.out.println("内部类变量:" + this.age);
  System.out.println("外部类变量:" + Outter.this.age);
  }
  }
  }
  public class test1 {
  public static void main(String[] args) {
  Outter out = new Outter();
  Outter.Inner in = out.new Inner();
  in.print();
  }
  }
  运行结果:
  局部变量:14
  内部类变量:13
  外部类变量:12
  从本例可以看出:成员内部类,是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:
  class Outter {
  private int age = 12;
  public Outter(int age) {
  this.age = age;
  getInInstance().print();   //必须先创建成员内部类的对象,再进行访问!
  }
  private Inner getInInstance() {
  return new Inner();
  }
  class Inner {
  public void print() {
  System.out.println("内部类没同名,所以直接调用外部类成员变量:" + age);
  }
  }
  }
  public class test1 {
  public static void main(String[] args) {
  Outter out = new Outter(10);
  }
  }
  运行结果:
  内部类没同名,所以直接调用外部类成员变量:10
  内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。
  比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。
  这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰。
  我个人是这么理解的,由于成员内部类看起来像是外部类的一个成员,所以可以像类的成员一样拥有多种权限修饰。要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的