Java的四种内部类
项目结构
接口
public interface Vehicle { public String desc(String detail); }
类
public class Car { private static String type = "汽车"; private String desc; public Car(String desc) { this.desc = desc; } /* * 常规内部类:定义在外部类类体中,直接使用外部类的实例变量和实例方法。 */ class Ferrari{ private String name; public Ferrari(String name) { this.name = name; } public String desc(){ return desc + " : " + name; } } /* * 静态内部类:只能访问外部类的static成员,不能直接访问外部类的实例变量、实例方法 */ public static class Jaguar{ private static String name = "捷豹"; public String desc(){ return type + " : " +name; } } /* * 局部内部类:在方法中定义,只能访问方法的final型实参、final型局部变量。 * 方法结束后,方法的实参、局部变量的生命周期结束,而局部内部类的对象仍然存在。 */ public String manufacture(final String manufacturer){ final String desc = "中型车"; class Ford{ private String name; public Ford(String name){ this.name = name; } public String getName() { return name; } } Ford ford = new Ford("金牛座"); return manufacturer + " : " + desc + " : " + ford.getName(); } /* * 匿名内部类: * 1 继承一个类或实现一个接口。不能同时实现一个接口和继承一个类,也不能实现多个接口。 * 2 不能定义构造方法。 * 3 匿名内部类的定义和第一次使用都发生在同样一个地方。 */ private Vehicle vehicle = new Vehicle() { @Override public String desc(String detail) { return desc + " : " + detail; } }; public Vehicle getVehicle() { return vehicle; } }
运行
public class Test { public static void main(String[] args) { Car car = new Car("独立悬挂"); // 常规内部类 Car.Ferrari ferrari = car.new Ferrari("Ferrari 488GTB"); System.out.println(ferrari.desc()); // 静态内部类 Car.Jaguar jaguar = new Car.Jaguar(); System.out.println(jaguar.desc()); // 局部内部类 System.out.println(car.manufacture("长安福特")); // 匿名内部类 System.out.println(car.getVehicle().desc("本田第十代雅阁")); } }