内部类的几种形式

内部类的几种创建方法:

1、成员内部类

 class Outer {
	private int i = 1;

	 class Inner {
		public void fun() {
			System.out.println("Outer I=" + i);
		}
	}

	public static void main(String[] args) {
		new Outer().new Inner().fun();//打印结果:Outer I=1
	}
}

<think>好的,我现在需要回答用户关于Java内部类的种类和定义形式的问题。首先,我得回忆一下Java内部类的基本类,常见的类型有成员内部类、局部内部类、匿名内部类和静态内部类。用户可能希望了解每种类型的特点以及如何定义和使用它们。根据用户提供的引用内容,引用[1]详细说明了成员内部类和局部内部类的定义方式,包括实例化的语法和变量访问规则。比如,成员内部类需要通过外部类实例来创建,而局部内部类则定义在方法内部,并且访问局部变量时需要变量是final或等效final的。引用[2]中的代码片段展示了内部类访问外部类变量的例子,比如使用Outer.this.num来访问外部类的成员变量。接下来,我需要将这些信息结构化,用清晰的中文解释每种内部类的定义格式和使用场景。同时,按照用户的要求,行内数学表达式用$...$,不过这里可能用不上数学公式,但需要注意代码块的使用。比如,成员内部类的实例化语法是Outer.Inner obj= newOuter().new Inner();,这需要正确展示。另外,用户可能对内部类的应用场景和注意事项感兴趣,比如为什么局部内部类访问的局部变量必须是final,或者静态内部类与非静态的区别。需要确保回答覆盖这些点,并生成相关问题,如内部类与外部类的访问权限、内存泄漏问题等。最后,检查是否符合系统级指令,如正确使用LaTeX格式(虽然这里可能较少),结构清晰,引用标识正确添加。确保没有遗漏任何内部类类型,并举例说明,帮助用户理解。</think>### Java内部类的种类及定义形式 Java内部类为四类,每种类型有不同的定义方式和应用场景: #### 1. **成员内部类(Member Inner Class)** - **定义格式**:在外部类内部直接定义的非静态类。 ```java class Outer { class Inner { // 内部类成员 } } ``` - **实例化方式**:需通过外部类实例创建。 ```java Outer.Inner inner = new Outer().new Inner(); ``` - **变量访问规则**: 若内部类与外部类成员变量重名,需通过`外部类名.this.变量名`访问外部类成员[^1]。例如: ```java class Outer { int num = 10; class Inner { int num = 20; void method() { System.out.println(Outer.this.num); // 输出外部类的num=10 } } } ``` #### 2. **局部内部类(Local Inner Class)** - **定义格式**:在外部类的方法或作用域内定义。 ```java class Outer { void method() { class Inner { // 类成员 } Inner inner = new Inner(); // 需在方法内实例化 } } ``` - **限制条件**: 局部内部类访问的局部变量必须是`final`或等效`final`(Java 8+允许省略`final`关键字,但变量实际不可变)[^1]。例如: ```java void method() { final int x = 10; class Inner { void print() { System.out.println(x); // x必须为final } } } ``` #### 3. **匿名内部类(Anonymous Inner Class)** - **定义格式**:通过接口或父类直接实例化,无显式类名。 ```java Runnable runnable = new Runnable() { @Override public void run() { System.out.println("匿名内部类"); } }; ``` - **应用场景**:适用于一次性使用的类,如事件监听器。 #### 4. **静态内部类(Static Nested Class)** - **定义格式**:使用`static`修饰符定义在外部类中。 ```java class Outer { static class StaticInner { // 类成员 } } ``` - **实例化方式**:无需外部类实例。 ```java Outer.StaticInner inner = new Outer.StaticInner(); ``` - **特点**:静态内部类不能直接访问外部类的非静态成员。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值