Java静态与非静态嵌套类

静态与非静态嵌套类

Car类作为示例

Car类中有以下成员

  • 实例字段:color、volume
  • 静态字段:wheelCount(轮胎个数)
  • 实例方法:startEngine()
  • 静态方法:getWheelCount()

现在我们要为汽车定义两种零件:

  • 车轮(Tire):所有的车轮都是通用的,并不依赖某一种车
  • 收音机(Radio):每台车适配的收音机都不同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class Car {  
private String color; //车身颜色(实例字段)
private static int wheelCount = 4; //车轮个数(静态字段)
private int volume = 0; //收音机音量(实例字段)

public Car(String color) {
this.color = color;
}

public void startEngine() {
System.out.println("Car is starting...");
}

public static int getWheelCount(){ //静态方法
return wheelCount;
}

public static class Tire{ //静态嵌套类
private double pressure;

public Tire(double pressure) {
this.pressure = pressure;
}

public void checkPressure() {

/*
* 在静态嵌套类中,我只能调用外部类的静态成员
* 比如wheelCount(静态字段)、getWheelCount(静态方法)
*/
System.out.println("static method getWheelCount:" + getWheelCount());
System.out.println("Pressure: " + pressure + "(Car has " + Car.wheelCount + " wheels)");
}
}

public class Radio { //非静态嵌套类

/*
* 在非静态嵌套类中,我可以调用外部类的任何成员
*
*/
public void increaseVolume() {
volume++;
System.out.println(color +" Car radio Volume: " + volume);
}

public void startEngineFromRadio() {
System.out.println("Car is checking:");
System.out.println("WheelCount:" + getWheelCount() + "(YES)");
startEngine(); // 直接调用外部类的实例方法
}
}

public static void main(String[] args) {

/*
* 静态嵌套类实例化,可以不需要实例化外部类
* 在这里也就是我如果要实例化Tire,我不需要实例化Car
*/
Car.Tire t = new Car.Tire(5);
t.checkPressure();

/*
* 非静态嵌套类实例化,必须要实例化外部类
* 在这里我如果要实例化Radio,我就必须要实例化Car之后我才能继续实例化Radio */
Car car = new Car("red");
Car.Radio radio = car.new Radio();
radio.increaseVolume();
radio.startEngineFromRadio();

}
}

区别总结:

静态嵌套类 非静态嵌套类
关键字 使用static修饰 static关键字
访问外部成员 只能访问外部类的静态成员 可以访问外部类的所有成员(包括私有)
实例化 可以直接通过类名实例化
Car.Tire t = new Car.Tire(5);
必须通过外部类实例创建
Car car = new Car("red");
Car.Radio radio = car.new Radio();
场景 与外部关联但是又可以单独存在的组件 必须依赖于外部类实力的组件

Java静态与非静态嵌套类
http://www.ming-ice-tea.top/2025/07/28/Java静态与非静态嵌套类/
作者
Ming
发布于
2025年7月28日
许可协议