Java__内部类与局部内部类的简单了解

本文详细介绍了Java中的内部类,包括非静态和静态内部类的使用方法,以及局部内部类的概念和特点。通过示例代码展示了如何创建内部类对象,调用其方法,并解释了不同类型的内部类在生命周期和作用域上的区别。此外,还阐述了局部内部类的生命周期与方法作用域的一致性,以及如何在方法中使用和调用局部内部类的方法。
摘要由CSDN通过智能技术生成

内部类:
    即定义在类中的类;内部类相当于是外部类中的一个属性,内部类本身也就是一个类,跟正常的类一样。
    在内部类使用时候的操作就和普通类一样,以下面代码为例,InnerClass为外部类,Run、Uu、Mm为内部类。
     内部类的使用少不了对象的创建,由于Run是非静态类,所以直接new Run();创建内部类对象便于外部类创建对象的时候直接调用内部类中的方法: 对象.new Run();,即new InnerClass().new Run(); ,为方便使用,直接用一个变量替代 即InnerClass.Run msi = new InnerClass().new Run();,而后调用内部类中的方法则是直接用msi+"."+内部类中的方法名 调用。

public class InnerClass {
	/**
	 *非静态内部类Run
	 */
	class Run{
		/**
		 * 非静态方法
		 */
		void modFun() {
			System.out.println("--Inner class--");
		}
	}
}
public static void main(String[] args) {
		InnerClass.Run msi  = new InnerClass().new Run();
		msi.modFun();
}

    Uu是静态类,所以直接new Uu();为内部类对象,方法和上述唯一的区别点在于Uu是静态的,外部类调用的时候可以把Uu看成是一个静态属性,直接由类名调用 InnerClass.Uu,之后再创建对象 new InnerClass.Uu();用于调用静态内部类中的非静态方法。给对象定义一个变量用于方便调用方法即InnerClass.Uu msg = new InnerClass.Uu();,而后直接对象msg+"."+方法(addMe()).

public class InnerClass {
	/**
	 *静态内部类Uu
 */
	static class Uu{
		/*
		 * 非静态方法
		 */
		void addMe() {
			System.out.println("++addMe++");
		}
	}
}
	public static void main(String[] args) {
		InnerClass.Uu msg = new InnerClass.Uu();
		msg.addMe();
}

    静态内部类Mm的描述大致和Uu一样,唯一的区别点在于Mm中的方法是静态方法,而Uu中的是非静态方法。静态方法调用直接用 内部类类名.方法,外部类调用内部类同Uu,直接类名调用,即 InnerClass.Mm.delete();

public class InnerClass {
	/**
	 *静态内部类Mm
	 */
	static class Mm{
	/*
	 * 静态方法
	*/
		static void delete() {
			System.out.println("==delete==");
		}
	}
}
	public static void main(String[] args) {
//	new InnerClass.Mm();    子类对象  为方便多次使用  可以用一个变量替代  即  InnerClass.Mm Tt = new InnerClass.Mm();
		InnerClass.Mm.delete();
}

局部内部类:
    即定义在方法中的类,生命周期和方法的生命周期一致,作用域只在方法中。
以下列代码为例参数局部内部类的调用。

public class AreaClass {
	int count = 5;
	public void addMe() {	
		class Uu{	
			int count = 6;	
			public void method1() {			
				int count = 7;
				System.out.println("count = "+count);
			}
	   		public void method2() {
				int count = 7;
				System.out.println("count = "+this.count);
			}
			public void method3() {
				int count = 7;
				System.out.println("count = "+AreaClass.this.count);
			}
		}
		Uu output = new Uu();
		output.method1();
		output.method2();
		output.method3();
	}
	public static void main(String[] args) {
		AreaClass area = new AreaClass();
		area.addMe();
	}
}

    由于局部内部类Uu定义在方法中,外部类可以调用方法而不能调用方法中的局部内部类,所以下手自然就从方法中开始,直接在方法中创建Uu 的对象 new Uu(),在用output变量接收,直接利用output+"."+方法调用方法完成方法addMe();在通过外部类直接调用addMe()方法完成类的调用。
    本次以函数输出count值来测试不同变量的调用,第一个输出:method1中count指当前变量 故count = 7;第二次输出:method2中count指局部内部类中的成员变量 故count = 6;第三次输出:method3中count指外部类中的成员变量 故count = 5;运行结果如下:

count = 7
count = 6
count = 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值