内部类(InnerClass)
一:概念
内部类(Inner Class),是 Java 中对类的一种定义方式,是嵌套类的一个分类,即非静态嵌套类(Non-Static Nested Class)。内部类(非静态嵌套类)分为成员内部类、局部内部类和匿名内部类三种。
内部类主要解决Java不能多重继承的问题。
二:内部类的特性
Inner class 作为类的成员:
- 可以声明为final的
- 和外部类不同,Inner class可声明为private或protected;
- lnner class可以声明为static的,但此时就不能再使用外层类的非static的成员变量;
Inner class 作为类:
- 可以声明为abstract类,因此可以被其它的内部类继承
【注意】非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类中才可声明static成员。
三:示例
内部类示例
public class inner_class {
int i;
public int z;
private int k;
//======================================================
/*
* 内部类
*/
class InnerClass {
int i; // 内部类拥有自己的属性,可以与外部类属性重名
public void setInner_files() {
// 内部类调用用外部类属性
inner_class.this.i = 1; // 外部属性 类名.this.属性
inner_class.this.k = 2;
inner_class.this.z = 3;
}
// 内部方法调用内部属性
public void SetVariable() {
this.i = 10;
}
}
//=====================================================
// 外部类调用内部类属性 方法,需要new一个对象
public void SetInfo() {
InnerClass ic2 = new InnerClass();
ic2.setInner_files();// 调用内部类方法
ic2.i = 10;
}
public void ShowInfo()
// 打印外部类属性
{
System.out.println(this.i);
System.out.println(this.k);
System.out.println(this.z);
}
//======================================================
public static void main(String[] args) {
inner_class ic = new inner_class();// 实例化对象
ic.SetInfo();
ic.ShowInfo();
}
}
多层继承示例
public class T1_inner_class {
public static void main(String[] args) {
A_Class test_Inner = new A_Class();
// 测试实现的多重继承
test_Inner.T1();// 调用A类T1方法
test_Inner.T2();// 调用A类T2方法
}
}
//=================================
/*
* A类同时获得B类和C类的方法,并重写
*/
class A_Class {
/*
* A类继承B类和C类实现多重继承
*/
// ==========================================
// 利用内部类继承B类
private class Inner_B extends B_Class {
// 内部类重写继承父类B_Class的方法
@Override
public void ShowInfo_B() {
System.out.println("这里是B类重写的方法");
}
}
// 利用内部类继承B类
private class Inner_C extends C_Class {
// 内部类重写继承父类C_Class的方法
@Override
public void ShowInfo_C() {
System.out.println("这里是C类重写的方法");
}
}
// ==========================================
public void T1() {
new Inner_B().ShowInfo_B(); // 调用B类重写的方法
}
public void T2() {
new Inner_C().ShowInfo_C();// 调用C类重写的方法
}
}
//=================================
class B_Class {
public void ShowInfo_B() {
}
}
//=================================
class C_Class {
public void ShowInfo_C() {
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?