`

浅谈内部类

    博客分类:
  • java
阅读更多
public class OuterClass 
{
	private static int i = 1;
	private int j = 2;
	private int k = 3;
	private int p = 9;
	
	public OuterClass()
	{
		//InterClass ic = new InterClass();
		System.out.println("外部类");
	}
	
	public static void out_f1()
	{
		//
		System.out.println("外部类的静态方法");
	}
	
	public void out_f2()
	{
		//
		System.out.println("外部类的非静态方法");
	}
	
	/**
	 * 外部类的非静态方法 访问成员内部类
	 */
	public void out_f3()
	{
		Inner_Member im = new Inner_Member();
		im.inner_f1();
	}
	
	
	/**
	 * 外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样
	 * 步骤1:建立外部类对象
	 * 步骤2:根据外部类对象建立内部类对象
	 * 步骤3:访问内部类的方法
	 */
	public static void out_f4()
	{
		OuterClass oc = new OuterClass();//外部类对象
		Inner_Member im = oc.new Inner_Member();//内部类对象
		im.inner_f1();
	}
	
	
	public static void main(String[] args) 
	{
		OuterClass oc = new OuterClass();//外部类对象
		
		out_f4();
		System.out.println("-------------------成员内部类-------------------------------");
		
		oc.out_f5(10);
		System.out.println("-------------------局部内部类-------------------------------");
		
		oc.out_f6();
		System.out.println("--------------------静态内部类------------------------------");
		
		
		
		System.out.println("---------------------匿名内部类-----------------------------");
	}
	
	
	/**1.成员内部类
	 * 即作为外部类的一个成员存在,与外部类的属性、方法并列。
	 * 
     * 注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。
	 *
	 * 成员内部类的优点:
	 * ⑴ 内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)
	 * ⑵ 用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
	 */
	private class Inner_Member
	{	
		int t = 12;
		int j = 11;
		//static int p = 5;//成员内部类中不能定义静态变量
		public Inner_Member ()
		{
			System.out.println("成员内部类");
		}
		
		void inner_f1()
		{
			System.out.println("外部变量 "+k);//外部类的变量如果和内部类的变量没有同名的,则可以直接使用变量名访问外部类的变量
			System.out.println("外部变量 "+OuterClass.this.i);
			System.out.println("外部变量 "+i);
			System.out.println("外部变量 "+OuterClass.this.j);//访问外部类中与内部类同名的变量可用'外部类名.this.变量名'
			
			System.out.println("内部变量 "+j);//在内部类中访问内部类自己的变量直接使用变量名
			System.out.println("内部变量 "+this.j);//也可以使用‘this.变量名’来访问内部类自己的变量
			System.out.println("内部变量 "+t);
			
			out_f1();
			out_f2();
			
		}
	}
	
	/**2.局部内部类
	 *  即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块
	 * 注意:①局部内部类中不可定义静态变量
	 *      ②可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
	 *
	 */
	public  void out_f5(int k)
	{
		final int s = 100;
		int f_i = 300;
		final int j = 200;
		
		class Inner_part
		{
			int s = 21;
			int p = 29;
			//static int m = 20;//不可以定义静态变量
			Inner_part(int k)
			{
				inner_f(k);
			}
			int inner_i = 22;
			
			void inner_f(int k)
			{
				System.out.println("外部类的实例变量 :"+i);//如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量
				System.out.println("外部类的局部变量 :"+s);//可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
				//System.out.println("外部类的局部变量 :"+f_i);
				System.out.println("内部类的变量 :"+p);//如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量
				System.out.println("内部类的变量 :"+this.p);//用"this.变量名" 访问的也是内部类变量
				System.out.println("外部类的变量 :"+OuterClass.this.p);//用外部"外部类类名.this.变量名" 访问的是外部类变量
//				OuterClass oc = new OuterClass();
//				System.out.println("外部类的变量 :"+oc.p);//如果内部类所在方法是静态方法,访问外部类变量需要创建外部类对象
				System.out.println("参数 :"+k);
			}
		}
		new Inner_part(k);
	}
	
	/**3.静态内部类
	 *  静态内部类定义在类中,任何方法外,用static定义
	 *  静态内部类可以用public,protected,private修饰
	 *注意:静态内部类中可以定义静态或者非静态的成员
	 */
	private static class Inner_Static
	{
		static int k = 31; 
		int j = 32;
		public Inner_Static()
		{
			System.out.println("静态内部类");
		}
		static void inner_f1()
		{
			System.out.println("访问外部类的变量:"+i);//静态内部类只能直接访问外部类的静态成员
//			System.out.println("访问内部类的变量:"+k);
//			System.out.println("访问外部类的变量:"+);
//			System.out.println("访问外部类的变量:"+k);
			out_f1();//包括静态变量和静态方法
//			out_f2();//静态内部类不能直接访问非静态变量和非静态方法,需创建外部类对象访问
			
			OuterClass oc = new OuterClass();
			oc.out_f2();
		}
		void inner_f2()
		{
			//
		}
	}
	/**
	 * 外部类访问静态内部类,对于其静态成员可以直接用内部类名访问,对于非静态成员需要实例化内部类
	 */
	public void out_f6()
	{
		System.out.println("外部访问静态内部类的静态变量"+Inner_Static.k);//  外部类访问内部类的静态成员:内部类.静态成员
		Inner_Static.inner_f1();
		
		//静态内部类可以直接创建类对象
		Inner_Static is = new Inner_Static();//  外部类访问内部类的非静态成员:实例化内部类即可
		System.out.println(is.j);
		is.inner_f2();
	}
	
	
	
	/**匿名内部类
	 * 
	 * 匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口
	 * 
	 * 匿名内部类的特点:
	 * 1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。
	 * 2,只是为了获得一个对象实例,不需要知道其实际类型。
	 * 3,类名没有意义,也就是不需要使用到。
	 * 
	 * 注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,
	 * 我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一
	 * 种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。
	 * 如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,
	 * 所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。
	 * 匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
	 */
	//具体实现一般是窗口监听时使用
	/*
	 * 
	 * void init(){
		p.add(yellow);
		p.add(blue);
		p.add(red);
		
		f.add(p);
		f.setSize(400, 300);
		f.setTitle("ActionDemo");
		f.setVisible(true);
		
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				f.setVisible(false);
				f.dispose();
				System.exit(0);
			}
		});
		yellow.addActionListener(new ButtonAction(Color.yellow));
		blue.addActionListener(new ButtonAction(Color.BLUE));
		red.addActionListener(new ButtonAction(Color.RED));
	}
	 */

	


}
分享到:
评论

相关推荐

    浅谈内部类与静态内部类的应用

    内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...

    浅谈Java内部类的四个应用场景

    ### 浅谈Java内部类的四个应用场景 #### 一、引言 在Java语言中,内部类(Inner Class)作为一种特殊的存在,为开发者提供了更为灵活的面向对象编程方式。通过本文,我们将深入探讨Java内部类的四个典型应用场景,...

    浅谈汽车行业的分类.pptx

    2. 多功能车(MPV):通常源自轿车平台,具有宽敞的内部空间,适合多人乘坐,兼顾舒适性和实用性。 3. 运动型多用途车(SUV):结合了越野车的通过性和轿车的舒适性,通常具有四驱系统,强调驾驶乐趣和多功能性。 ...

    浅谈cache memory 王齐.pdf

    缓存是一类快速存储设备,它位于处理器和主存(主内存)之间。缓存的主要功能是存储处理器经常使用的指令和数据。由于CPU执行速度远快于主存存取速度,为了减少处理器因等待数据而空闲的时间,缓存被用来暂存这些...

    浅谈Java内部类——静态内部类

    Java静态内部类详解 Java中的内部类是指在一个类中定义的另一个类,它可以帮助我们更好地组织代码,使代码更加简洁和易于维护。在Java中,内部类可以分为静态内部类和非静态内部类两种。本文将主要介绍Java静态内部...

    浅谈软件测试

    白盒测试关注内部设计和程序实现,依据设计文档进行,常用于单元测试阶段。黑盒测试则关注输入输出,依据需求文档进行,适用于系统测试和验收测试。此外,还有单元测试、集成测试、系统测试和验收测试四个阶段,它们...

    浅谈管理咨询类公司如何建立对员工的有效激励制度.zip

    在管理咨询行业中,员工的能力和积极性...总的来说,管理咨询类公司建立有效激励制度需综合考虑员工需求、公司目标和市场环境,通过多元化、公平透明的手段,不断优化激励策略,以达到提升员工满意度和公司绩效的目标。

    浅谈面向对象程序设计

    封装是面向对象设计的一个基本原则,指的是将数据和操作数据的方法封装在一个单一的单元(类)中,对外部隐藏对象的内部细节。这种机制保护了数据的完整性和安全性,同时也简化了对象之间的交互。 #### 4. 继承...

    浅谈六类线布线.docx

    3. **电缆压缩**:使用扎线带固定电缆时,力度不宜过大,以免造成线缆内部绞线的变形。扎线带的紧度只需足够支撑电缆即可。 4. **电缆重量**:六类线通常比五类线重,因此在悬挂布线时,必须考虑电缆的自重,避免因...

    浅谈VC++中滚动条的编程1.pdf

    ### 浅谈VC++中滚动条的编程 #### 引言 VC++作为一种功能强大且复杂的可视化编程工具,被广泛应用于软件开发领域。对于初学者而言,掌握VC++及其内部的MFC(Microsoft Foundation Classes)基础类库并不容易,尤其...

    医疗建筑中心消毒供应室给排水设计浅谈.pdf

    "医疗建筑中心消毒供应室给排水设计浅谈" 本文通过对医疗建筑中心消毒供应室给排水设计的浅谈,旨在为医疗建筑中心消毒供应室的设计提供理论依据和设计指南。医疗建筑中心消毒供应室是医院中的一种特殊区域,对给...

    浅谈机器学习与深度学习的概要及应用.pdf

    浅谈机器学习与深度学习的概要及应用 机器学习和深度学习是人工智能的两个重要分支领域。机器学习是指在没有明确的设定情况下,使计算机具有学习能力的研究领域。深度学习是机器学习的一个子类,可以把它看作一种...

    浅谈FPGA/CPLD的复位电路设计

    ### 浅谈FPGA/CPLD的复位电路设计 #### 摘要 本文将深入探讨FPGA/CPLD中的复位电路设计问题。复位电路是集成电路设计中的一个重要组成部分,它确保了系统能够在启动时处于一个已知的稳定状态。文章首先介绍了复位的...

    浅谈数据结构课程教学内容的联系.pdf

    文章《浅谈数据结构课程教学内容的联系.pdf》探讨了数据结构课程与图书馆信息资源共享之间的关系,以及计算机网络技术在图书馆信息资源共享中的应用。文章首先分析了资源共享在图书馆中的重要性,随后详细介绍了...

    浅谈网络安全的重要性.docx

    浅谈网络安全的重要性全文共3页,当前为第1页。浅谈网络安全的重要性全文共3页,当前为第1页。网络安全 浅谈网络安全的重要性全文共3页,当前为第1页。 浅谈网络安全的重要性全文共3页,当前为第1页。 ——浅谈网络...

    浅谈PHP值mysql操作类

    例如,有些方法体内部存在语法错误或缺少必要的代码块。在实际应用中,需要对这些方法进行修正和补充以确保代码能够正常工作。 总结起来,这篇文档展示了如何利用PHP语言来构建一个简单的MySQL操作类,实现了基本的...

    Java反射技术浅谈 (1).pdf

    Java反射技术浅谈 Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。...

    浅谈模具载荷分类.pptx

    面载荷可以施加在模型的线、面或实体上,并通过内部算法传递给各个单元。例如,在模拟一个块体顶部受到的压力时,就可以将该压力视为面载荷。正确使用面载荷对于预测结构在压力作用下的行为至关重要。 通过对模具...

Global site tag (gtag.js) - Google Analytics