在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
目录
一、成员内部类
成员内部类是最普通的内部类,它的定义为位于另一个类的内部,如下实例所示:Inner被称为成员内部类。成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
class Outer {
private int a = 5;
class Inner {
public void printInfo(){
System.out.println("a = "+a);
}
}
}
public class InnerDemo {
public static void main(String args[]) {
Outer o = new Outer();
Outer.Inner i = o.new Inner();
i.printInfo();
}
}
编译运行:
a = 5
二、局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
class People{
public People() {
}
}
class Man{
public Man(){
}
public People getWoman(){
class Woman extends People{ //局部内部类
int age =0;
}
return new Woman();
}
}
提示:局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。
三、静态内部类
用static声明的内部类就变成了外部类(静态内部类),它可以访问外部类的static属性,实例如下所示:
class Outer {
private static int a = 10;
static class Inner {
public void printInfo(){
System.out.println("a = "+a);
}
}
}
public class InnerDemo {
public static void main(String args[]) {
Outer.Inner i = new Outer.Inner();
i.printInfo();
}
}
编译运行:
a = 10
四、匿名内部类
interface A {
public void printInfo();
}
class B implements A {
public void printInfo() {
System.out.println("Hello, world!");
}
}
public class Anony {
public static void main(String args[]) {
testFunc(new B());
testFunc(new A(){
public void printInfo() {
System.out.println("Hello, world2!");
}
});
}
public static void testFunc(A a) {
a.printInfo();
}
}
编译运行:
Hello, world!
Hello, world2!