Java内部类详解:静态与非静态
需积分: 9 71 浏览量
更新于2024-08-05
收藏 3KB MD 举报
"内部类是Java编程中一个重要的特性,它允许我们在一个类的定义内部定义另一个类。这种设计模式提供了更高的代码封装性和复用性。本文将详细讲解内部类的相关知识点,包括内部类的分类、访问权限以及静态与非静态内部类的区别。"
在Java中,内部类分为两种主要类型:静态内部类(也称为嵌套类)和非静态内部类。这两种类型的内部类在使用和功能上有所不同。
**非静态内部类**:
1. **访问权限**:非静态内部类可以直接访问外部类的所有成员,包括私有变量、方法,无需通过对外部类对象的引用。这是因为非静态内部类会隐含地持有一个对外部类的引用,使得它能够访问外部类的非静态成员。
```java
class Outer {
String out_string = "IamOuter";
public void Inner_1() {
Inner01 in = new Inner01();
in.Print();
}
class Inner01 {
public void Print() {
System.out.println("Inner01.Print()");
System.out.println("out_string=" + out_string);
}
}
}
```
2. **实例化**:非静态内部类需要一个外部类的实例才能被实例化。这意味着我们不能直接创建非静态内部类的对象,而是必须先创建外部类的对象,然后通过外部类对象来创建内部类的对象。
```java
public class InnerDemo01 {
public static void main(String[] args) {
Outer out = new Outer();
out.Inner_1();
}
}
```
**静态内部类**:
1. **访问权限**:静态内部类只能访问外部类的静态成员,因为它们不持有对外部类的实例引用。静态内部类可以看作是外部类的静态成员,因此它们可以像普通静态类一样被声明、实例化。
```java
class Outer {
String out_string = "IamOuter";
static String out_static = "static";
public void Inner_2() {
Inner02 in = new Inner02();
in.Print();
}
static class Inner02 {
public void Print() {
System.out.println("Inner02.Print()");
System.out.println(out_static);
}
}
}
```
2. **实例化**:由于静态内部类不依赖于外部类的实例,所以我们可以直接创建静态内部类的对象,而无需先创建外部类对象。
```java
public class InnerDemo01 {
public static void main(String[] args) {
Outer.Inner02 in = new Outer.Inner02();
in.Print();
}
}
```
总结来说,非静态内部类和静态内部类的主要区别在于对外部类成员的访问权限和实例化方式。非静态内部类具有更紧密的耦合性,能访问外部类的非静态成员,而静态内部类则更像是外部类的一个独立的类,只能访问外部类的静态成员。选择使用哪种类型的内部类取决于具体的设计需求和封装策略。
2019-03-18 上传
2022-03-19 上传
2007-09-04 上传
竹一笔记
- 粉丝: 1533
- 资源: 2
最新资源
- Angular程序高效加载与展示海量Excel数据技巧
- Argos客户端开发流程及Vue配置指南
- 基于源码的PHP Webshell审查工具介绍
- Mina任务部署Rpush教程与实践指南
- 密歇根大学主题新标签页壁纸与多功能扩展
- Golang编程入门:基础代码学习教程
- Aplysia吸引子分析MATLAB代码套件解读
- 程序性竞争问题解决实践指南
- lyra: Rust语言实现的特征提取POC功能
- Chrome扩展:NBA全明星新标签壁纸
- 探索通用Lisp用户空间文件系统clufs_0.7
- dheap: Haxe实现的高效D-ary堆算法
- 利用BladeRF实现简易VNA频率响应分析工具
- 深度解析Amazon SQS在C#中的应用实践
- 正义联盟计划管理系统:udemy-heroes-demo-09
- JavaScript语法jsonpointer替代实现介绍