`

内部类的详细解说

    博客分类:
  • JAVA
阅读更多

                          静态内部类

           成员式的:

                          成员内部类

内部类:

                          局部内部类

           局部式的:

                          匿名内部类

 

 

(1) 静态内部类和成员内部类:相当于外部类中成员变量,与这些变量的方法都是并列的。

(2) A类的存在必须是以B类存在为前提的。 

(3) 所有的访问权限修饰符都不能放在内部类的前面,它前面只能放abstract或者final。

(4) 如果内部类在外部类的方法中定义的(叫做局部内部类) ,则这个内部类只能访问这个方法中的final变量。其它的变量都无法访问的(这个不信你可以试)。即是final int length = 100;

 

静态内部类代码:
package test;
public class StaticInnerClassTest {
	public static void main(String[] args) {
		//第三方类中生成静态内部类对象		
		OuterA.InnerA in = new OuterA.InnerA("Mary",120);
		in.test();
	}
}

class OuterA{
	private static String name = "solo";
	int age;
	public void move(){
		System.out.println("moving...");
		//在外部类中生成静态内部类对象
		InnerA a = new InnerA("Byr",150);
	}
	static class InnerA{
		String name;
		int weight;
		public InnerA(String name,int weight){
			this.name = name;
			this.weight = weight;
		}
		public void test(){
			System.out.println("test()");
			System.out.println(name);
			//访问外部类中同名属性
			System.out.println(OuterA.name);
			System.out.println(weight);
		}
	}
}

 

   

成员内部类代码:
package test;

public class MemberInnerClassTest {
	public static void main(String[] args) {
		OuterB out = new OuterB();
		//在第三方类中如何生成成员内部类对象
		OuterB.InnerB in = out.new InnerB("Mary",120);
		in.test();
		//一个外部类对象,可以生成若干个内部类对象
		OuterB.InnerB in2 = out.new InnerB("Mandy",140);
		in2.test();
	}
}

class OuterB{
	String name = "solo";
	int age;
	public void move(){
		System.out.println("moving...");
	}
	public InnerB test(){
		return this.new InnerB("Lili",150);
		//return new InnerB("Lili",150);
	}
	class InnerB{
		//成员内部类中不能有静态成员
		int weight;
		String name;
		public InnerB(String name,int weight){
			this.name = name;
			this.weight = weight;
		}
		public void test(){
			System.out.println(name);
			System.out.println(weight);
			//访问外部类中的同名属性
			System.out.println(OuterB.this.name);
		}
	}
}

 

局部内部类代码:这里提出一个问题,这个问题也就是演变这个局部内部类LocalInnerClassTest的来源。
                问题是这样的:在外部类OuterC中如何访问内部类InnerC的test方法?
答案就是下面这个:是通过继承来实现的。
package test;

public class LocalInnerClassTest {
	public static void main(String[] args) {
		OuterC out = new OuterC();
//		InnerC in = new InnerC();
		Super o = out.move();
		o.test();
		
	}

}

class OuterC{
	String name;
	int age;
	public Super move(){
		int weight = 100;
		class InnerC extends Super{
			int height;			
			public void test(){
				System.out.println("InnerC...test");
			}
		}
		return new InnerC();
	}
	
}


class Super{
	public void test(){
		System.out.println("Super...test()");
	}
}
 

 

          

分享到:
评论

相关推荐

    电话机 部分电路详细解说 超好PPT文件

    电话机的电路设计是通信技术中的基础部分,它涉及到多个关键组件和...以上是电话机部分电路的详细解说,涵盖了从基本保护到复杂信号处理的多个层面。这些知识对于理解电话机的工作原理,故障排查以及维护都至关重要。

    JVM详细解说图.zip

    JVM的详细解说图通常会展示其内部结构、工作原理以及如何执行Java程序的关键过程。在这个“JVM详细解说图.zip”压缩包中,包含了一张名为“微信图片_20210709194300.png”的图片,我们可以从这个图片中探讨几个重要...

    类图详细实例解说UML基础教程(内部使用教程)

    下面我们将详细解读类图中的各个元素。 1. **接口(Interface)**: - 接口通常用一个空心圆加直线来表示,例如“讲人话”的接口。 - 接口定义了一组操作,但不提供具体的实现,如`IFly`和`ILanguage`接口,它们...

    AMD_NV芯片组上电时序详细解说.

    "AMD_NV芯片组上电时序详细解说" AMD_NV芯片组上电时序详细解说是指AMD_NV芯片组在上电过程中的时序控制机制。该机制主要涉及到芯片组的上电、供电和时序控制三个方面。 上电部分 在上电部分,AMD_NV芯片组需要...

    SDRAM详细解说,很详细

    ### SDRAM详细解说 #### 一、DRAM与SRAM基础知识 **DRAM(Dynamic Random Access Memory,动态随机存取存储器)**与**SRAM(Static Random Access Memory,静态随机存取存储器)**是两种主要的RAM(随机存取存储器...

    高速计数器详细解说.pdf

    "高速计数器详细解说.pdf" 高速计数器是高速计数器系统中的一种特殊的计数器,具有高速计数、高速计数器的输入端、高速计数器的状态字节和高速计数器的工作模式等几个关键组件。高速计数器的主要功能是实现高速计数...

    spi详细解说1213456

    ### SPI详细解说:深入理解串行外设接口 #### 一、引言 串行外设接口(Serial Peripheral Interface,简称SPI),是一种高速的、全双工、同步的串行通信协议,主要用于微控制器和外围设备之间的数据交换。SPI允许...

    MAX232的详细解说

    MAX232内部包含了两个驱动器和两个接收器,以及一个电压发生器电路。这个电压发生器利用单个+5V电源生成所需的负电压,以驱动RS232接口的高电压电平。驱动器负责将TTL/CMOS电平转换为RS232电平,接收器则将RS232电平...

    AD模块复用详细解说

    Channel Offset是用于标识同一类信号通道偏移量的参数,保持一致性是实现模块复用的前提。 2. 器件不能被锁定,锁定的器件无法参与复用过程,因此在开始前应检查并解除器件锁定状态。 3. 如果相同模块位于同一张原理...

    电话机 部分电路详细解说

    以下是电话机部分电路的详细解说: 1. **放电管**: - 气体放电管和半导体放电管常用于电话机的线路保护,防止过电压损害电话机的其他部件。它们在短路或过电压情况下工作,以保护电路不受损害。电话机中的放电管...

    单片机器指令详细解说

    通过这些指令,可以灵活地在单片机内部进行数据移动,满足不同的算法和控制逻辑需求。 #### MOVC类指令及功能 MOVC类指令主要用于查找存储在程序存储器中的数据表格,通常用于实现快速查表功能。MOVC指令有以下两...

    23种设计模式详细解说

    "23种设计模式详细解说"涵盖了面向对象设计中的经典模式,它们被广泛应用于各种软件项目中。 1. 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。在C#中,通常使用静态成员或双检查锁定实现...

    reportViewe报表 动态 源代码绝对可用附详细解说

    这份资料包含了reportViewe报表动态展示的完整源代码,并提供了详细的解说,对于学习和定制这个报表系统非常有帮助。 首先,我们需要了解报表系统的基本架构。通常,报表系统包括数据获取、数据处理、报表设计和...

    工程网络图详细解说.pptx

    本篇文章将详细解说工程网络图的相关知识点,包括双代号网络计划和单代号网络计划。 首先,我们来了解网络图的基本概念。网络图是由箭线和节点构成的有向、有序的网状图形,用于表示工作流程。网络图分为两种主要...

    css基本技术详细解说

    学习CSS的基础知识后,可以深入研究更高级的主题,如选择器的更多类型(如伪类和伪元素)、布局技术(如盒模型、Flexbox和Grid)、响应式设计、动画和过渡效果等。CSS的灵活性和强大功能使其成为网页设计不可或缺的...

    C语言函数详细解说与源代码

    本资源包提供了“C语言函数”的详细解说及源代码,包括电子书和可执行程序两种形式,便于学习者通过理论结合实践来掌握这一关键知识点。 电子书"c语言.chm"可能包含了以下内容: 1. **函数定义与声明**:函数由...

Global site tag (gtag.js) - Google Analytics