Java中的内部类是什么?
已发表: 2022-04-29Java 中内部类的概念是 Java 编程的基础。 在 Java 中,嵌套类和内部类是两个非常相似但又略有不同的类设计思想,并且经常相辅相成。
嵌套类在另一个类中定义,有两种类型——静态嵌套类和非静态嵌套类。 另一方面,内部类是一种非静态嵌套类,并且进一步分为三种类型——成员内部类、匿名内部类和本地内部类。
那么,这三种类型的内部类是什么意思,它们的用途是什么? 继续阅读以了解有关 Java 内部类的详细指南。
Java中内部类的含义
非静态嵌套类或内部类在另一个类中定义,并且可以访问外部类(封闭类)的成员。 相反,静态嵌套类也是定义在另一个类中的类,但与非静态嵌套类不同的是,它不能访问其外部类的成员变量。 在非静态嵌套类的情况下,我们不需要创建外部类的实例。 但是在内部类的情况下,我们必须先实例化外部类才能实例化内部类。
资源
Java内部类的类型
在 Java 中,内部类有以下三种类型:

- 成员内部类
- 匿名内部类
- 本地内部类
现在,让我们通过示例了解每种类型的内部类。
1. 成员内部类
Java中的成员内部类是在类内部但在方法外部创建的非静态嵌套类。 也称为常规内部类,可以使用私有、公共、默认和受保护等访问修饰符声明成员内部类。
成员内部类的语法如下:
类外{
//代码
类内{
//代码
}
}
Java示例中的成员内部类:
下面给出了一个程序来演示如何创建一个内部类并访问它。 我们将内部类设为私有并使用方法 display_Inner() 来访问该类。
类 DemoOuter {
整数;
//内部类
私人类 DemoInner {
公共无效打印(){
System.out.println(“这是内部类”);
}
}
// 从内部方法访问内部类
无效显示_内部(){
DemoInner 内部 = 新的 DemoInner();
内部.print();
}
}
公共类 MyClass {
公共静态无效主要(字符串参数[]){
// 实例化外部类
DemoOuter 外部 = 新的 DemoOuter();
// 访问 display_Inner() 方法
外部.display_Inner();
}
}
输出:这是内部类
在上面的例子中,OuterDemo 是外部类,InnerDemo 是内部类,我们在方法 display_Inner() 内部实例化内部类,该方法是从 main 方法调用的。
探索我们流行的软件工程课程
SL。 不 | 软件开发计划 | |
1 | LJMU & IIITB 计算机科学硕士 | 加州理工学院 CTME 网络安全证书课程 |
2 | 全栈开发训练营 | 区块链中的 PG 程序 |
3 | 软件开发行政研究生课程 - DevOps 专业化 | 查看所有软件工程课程 |
2.匿名内部类
Java中的匿名内部类是一个没有任何类名的内部类,并且只创建了一个对象。 Java 中的匿名内部类是同时声明和实例化的。 当我们想要覆盖类或接口的方法时,它们是最有价值的。

Java中匿名内部类的语法如下:
AnonymousInner an_inner = new AnonymousInner() {
公共无效我的方法(){
//代码
}
};
Java 中的匿名内部类可以通过两种方式创建:
- 使用类
- 使用界面
Java示例中的匿名内部类(使用类):
抽象类膳食{
抽象无效吃();
}
类 TestAnonymousInner{
公共静态无效主要(字符串参数[]){
餐 m=新餐(){
void eat(){System.out.println(“祝你胃口大开!”);}
};
肉();
}
}
输出:胃口大开!
Java示例中的匿名内部类(使用接口):
界面游戏{
无效播放();
}
类 TestAnnonymousInner1{
公共静态无效主要(字符串参数[]){
游戏 g=新游戏(){
public void play(){System.out.println(“户外游戏”);}
};
g.play();
}
}
输出:户外游戏
3.本地内部类
Java 中的本地内部类是在方法内部创建的类。 与局部变量的情况一样,局部内部类的范围仍然限制在方法内。
本地内部类在块内定义:方法体、if 子句或 for 循环。 本地内部类不是任何封闭类的成员,而是属于定义它的块。 因此,即使 Java 中的本地内部类不能有任何与之关联的访问修饰符,您也可以将其标记为抽象或最终的。 如果我们想调用本地内部类的方法,我们必须在方法内部实例化该类。
Java示例中的本地内部类:
下面是一个示例程序,用于演示如何实例化在外部类的方法中声明的本地内部类的对象。
包内类;
公共类 Outer_Class
{
// Outer_Class 类的实例方法。
公共无效显示()
{
// 方法本地内部类的声明。
类Inner_Class
{
公共无效味精(){
System.out.println(“这是一个本地内部类!”);
}
}
// 创建方法局部内部类的实例,并使用对象引用变量 i 调用 msg() 方法。
Inner_Class i = 新的 Inner_Class();
i.msg();
}
公共静态无效主要(字符串 [] 参数)
{
// 创建外部类 Outer_Class 的对象。
Outer_Class o = 新的 Outer_Class();
o.display();
}
}
输出:这是一个本地内部类!
牢记 Java 内部类的基础知识,让我们首先了解为什么需要它们。
Java内部类的优点
Java 中的内部类带来了三个重要的实用程序。 这些如下:
1、由于Java内部类可以访问外部/主类的数据成员和方法,包括private,它代表了一种特定类型的关系。
2. Java 内部类显着减少了编码,因为它需要更少的编写。
3、Java中的内部类在逻辑上将类和接口组合在一个地方,从而增强了代码的可读性并使其更易于维护。
加起来
嵌套类的概念简化并增加了在 Java 编程中任何地方创建类的灵活性。 在这方面,称为内部类的非静态嵌套类特别有用,正如我们在迄今为止的讨论中已经看到的那样。

最后,我们想说明两个使用内部类似乎最合适的实例。 首先,当两个类具有密切关系并且任何其他类都无法访问时,Java 内部类是理想的。 其次,内部类在 Java GUI 编程事件处理中很常见。 因此,在涉及侦听器及其 GUI 组件的情况下,可以安全地使用 Java 内部类。
想知道在哪里学习 Java?
upGrad 的软件工程与工作相关的 PG 认证 就是你要找的!
upGrad 的软件工程与工作相关的 PG 认证专为应届毕业生和最后几年设计,非常适合那些想要学习编程并担任入门级软件角色的人。 这个为期 5 个月的在线课程将教授 Java、JavaScript、HTML5、DSA、AWS、MERN 等顶级软件技能!
节目亮点:
- 专注于 MERN 堆栈/云原生
- 500 多个小时的在线学习
- 350 多个小时的实践培训
- 50+现场会议
- 五个行业项目
- 与行业专家交流
- 与同行和行业专家的问答论坛
- 来自助教和行业导师的学习支持
立即注册,向行业中的佼佼者学习!
内部类和子类有什么区别?
内部类是嵌套或定义在另一个类中的类。 另一方面,子类是从另一个类派生的类。 此外,虽然内部类只能通过使用它所嵌套的外部类的引用来访问,但子类可以直接访问,除非子类继承了私有变量。
我们可以在 Java 中的类中编写类吗?
是的,我们可以在 Java 中的另一个类中定义一个类。 这样的类被称为嵌套类,它允许我们在一个地方逻辑地组织类,从而创建更易于维护和可读的代码。 作为其封闭类的一部分,嵌套类可以声明为公共的、私有的、包私有的或受保护的。
Java内部类可以是私有的吗?
是的,Java 内部类可以是私有的。 但是一旦内部类被声明为私有,就不能从类外的对象访问它。 内部和外部类可以访问彼此的私有实例变量和私有方法。 只要我们在外部或内部类中,修饰符 private 和 public 具有相同的效果。