Java嵌套类的深入解析与应用
立即解锁
发布时间: 2025-08-18 02:26:19 阅读量: 1 订阅数: 17 

# Java 嵌套类的深入解析与应用
## 1. 静态嵌套类
### 1.1 定义与特性
静态嵌套类是指在一个类的内部定义的类,并且使用 `static` 关键字进行声明。这样做的目的是使嵌套类的对象独立于外部类的对象。以下是一个示例代码:
```java
public class Outside {
public static class Skinside {
// Details of Skinside
}
// Nested class
public class Inside {
// Details of Inside class...
}
// More members of Outside class...
}
```
在上述代码中,`Skinside` 是一个静态嵌套类,而 `Inside` 是非静态嵌套类。对于静态嵌套类,我们可以独立于外部类的对象来创建其对象,示例如下:
```java
Outside.Skinside example = new Outside.Skinside();
```
需要注意的是,静态嵌套类的名称需要使用外部类的名称进行限定,即 `Outside.Skinside`。而且,静态嵌套类可以有静态成员,而非静态嵌套类则不能。
### 1.2 静态嵌套类与非静态嵌套类的访问规则
| 嵌套类类型 | 对外部类静态成员的访问 | 对外部类非静态成员的访问 | 自身能否有静态成员 |
| ---- | ---- | ---- | ---- |
| 静态嵌套类 | 可以访问 | 不能访问 | 可以有 |
| 非静态嵌套类 | 可以访问 | 可以访问 | 不可以有 |
### 1.3 静态嵌套类示例:MagicHat 与 Rabbit
我们通过一个具体的例子来进一步理解静态嵌套类。创建一个 `MagicHat` 类,该类包含一个可变数量的 `Rabbit` 对象,`Rabbit` 类作为 `MagicHat` 类的静态嵌套类。以下是 `MagicHat.java` 的基本结构:
```java
public class MagicHat {
// Definition of the MagicHat class...
// Nested class to define a rabbit
static class Rabbit {
// Definition of the Rabbit class...
}
}
```
完整的 `MagicHat` 类代码如下:
```java
import java.util.Random; // Import Random class
public class MagicHat {
static int maxRabbits = 5; // Maximum rabbits in a hat
static Random select = new Random(); // Random number generator
// Constructor for a hat
public MagicHat(String hatName) {
this.hatName = hatName; // Store the hat name
rabbits = new Rabbit[1+select.nextInt(maxRabbits)]; // Random rabbits
for(int i = 0 ; i < rabbits.length ; ++i) {
rabbits[i] = new Rabbit(); // Create the rabbits
}
}
// String representation of a hat
public String toString() {
// Hat name first...
String hatString = "\n" + hatName + " contains:\n";
for(Rabbit rabbit : rabbits) {
hatString += " " + rabbit; // Add the rabbits strings
}
return hatString;
}
private String hatName; // Name of the hat
private Rabbit rabbits[]; // Rabbits in the hat
// Nested class to define a rabbit
static class Rabbit {
// A name is a rabbit name from rabbitNames followed by an integer
static private String[] rabbitNames = {"Floppsy", "Moppsy",
"Gnasher", "Thumper"};
static private int[] rabbitNamesCount = new int[rabbitNames.length];
private String name; // Name of the rabbit
// Constructor for a rabbit
public Rabbit() {
int index = select.nextInt(rabbitNames.length); // Get random name index
name = rabbitNames[index] + (++rabbitNamesCount[index]);
}
// String representation of a rabbit
public String toString() {
return name;
}
}
}
```
对应的测试类 `TryNestedClass` 代码如下:
```java
public class TryNestedClass {
static public void main(String[] args) {
// Create three magic hats and output them
System.out.println(new MagicHat("Gray Top
```
0
0
复制全文
相关推荐










