你好,最明显的区别就是:
成员内部类和类的属性是平行的。
而局部内部类是方法体中声明的类。举个例子:
public class Demo {
private int age ;
private class Inner { //Inner就是成员内部类
//...
}
public void test() {
class InnerMethod { // 就是局部内部类
//...
}
//....
}
//.....
}
下面已经说的很详细了,我补充一下。main方法是可执行方法,在main方法中不允许有内部类。
成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。
注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员,而且内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。
局部内部类: 即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。
注意:局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的。在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。