共有四种:
1.
静态内部类
编译生成StaticInnerClass$InnerClass.class文件
示例1
public class StaticInnerClassTest { public static void main(String[] args) { //声明静态内部类的方式。 StaticInnerClass.InnerClass inner = new
inner.output(); } }
class StaticInnerClass { private static int a = 4;
//静态内部类只能访问外部类的静态成员变量和静态方法。 public static class InnerClass { public void output() { System.out.println(a); } } } |
示例2
public class StaticInnerClassTest2 { public static void main(String[] args) { //静态内部类的静态方法,可以不用实例化静态类而直接调用。 Animal.Cat.run(); Animal.Dog.run(); } }
class Animal { static class Cat { public static void run() { System.out.println("Cat is running"); } }
static class Dog { public static void run() { System.out.println("Dod is running"); } } } |
2.
成员内部类
可以访问外部类的静态与非静态的方法和成员变量。
public class MemberInnerClassTest { public static void main(String[] args) { //成员内部类的定义方式 MemberInnerClass.InnerClass inner = new
inner.output(); } }
class MemberInnerClass { private int a = 4;
public class InnerClass { private int a = 5;
public void output() { //在成员内部类调用外部类的成员,必须使用下面的方式 System.out.println(MemberInnerClass.this.a); } } }
|
3.局部内部类
定义在外部类的方法里面
public class LocalInnerClassTest { public static void main(String[] args) { LocalInnerClass local = new local.doSomething(); } }
class LocalInnerClass { public void doSomething() { // 如果在外部类的方法里面定义一个变量,必须用fianl修饰,否则不能被局部内部类访问。 final int a = 8;
//在方法里声明的类就是局部内部类 class InnerClass { public void test() { System.out.println(a); } }
//
|