项目结构
接口
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("本田第十代雅阁"));
}
}