首页 > 代码库 > Java 之 -------------- 内部类 详解

Java 之 -------------- 内部类 详解

java中的内部类,分为 内部类,局部内部类,匿名内部类!


内部类: 顾名思义 定义在类的内部的类叫做 内部类!

局部内部类: 定义在局部函数中的 类,叫做 局部内部类!

匿名内部类:  没有名字的内部类! 玩 android  都知道,android  比较常见 匿名内部类!


内部类的优点:

1 内部类可以直接 访问 外部类的所有成员!

因为,当你调用外部类的时候,却生了 outer.this.成员变量或函数!

2 含有静态成员的内部类, 必须是静态的!

3 内部类一般用在设计中!


弊端:

1 内部类 不能直接创建,  需要在前面 添加 外部类!

     2  外部类 访问 内部类
      先创建内部类 对象, 在访问!

代码如下:
package stu.love.d;


class Outer
{
	int num = 6;
	//内部类
	class Inner
	{
		public void show()
		{
			System.out.println("Hello World!"+num);
		}
	}
	
	public void func()
	{
		Inner in = new Inner();
		in.show();
	}
}

public class Innerdemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Outer out = new Outer();
		out.func();
		//直接创建内部类对象
//		内部类的类型   外部类.内部类  
		
		Outer.Inner  in = new Outer().new Inner();
		
		Outer.Inner  in1 = out.new Inner();
		
	}

}

内部类定义为 静态的时候:
代码如下: 静态 直接用类名调用!
class Person
{
	class Heart
	{
	}
}
class Outer
{
	private  static int num = 6;
	static  class Inner
	{
		public static void show()//静态方法,其所在的内部类必须是静态的
		{
			System.out.println("Hello World!"+num);
		}
	}
	public void func()
	{
		Inner in = new Inner();
		in.show();
	}
}
class Demo16
{
	public static void main(String[] args) 
	{
		
		//调用静态内部类中的非静态方法
		Outer.Inner in = new Outer.Inner();
		in.show();
		//调用静态内部类中的静态方法
		Outer.Inner.show();
	}
}


局部内部类:

实际意义 不是很大哦!
因为,她定义在 函数中,生命周期比较短。
注意的是: 她 所调用的变量 奥,因为 出栈后 可能 就消失了!
代码:
局部内部类:如果访问其所在函数的局部变量,该局部变量必须是final的
class Outer 
{   int num = 3;
	Object obj;
	public void func(final int x)
	{   final int y = 6;
	    <span style="white-space:pre">	</span>//  局部内部类:
		class Inner //extends Object
		{
			public void show()
			{
				System.out.println(y);
			}
			public String toString()
			{
				return "inner"+y;
			}
		}
       <span style="white-space:pre">		</span>// 用的话 在 函数内使用!
		obj = new Inner();
	}
	public void  function()
	{
		obj.toString();
	}
}
class Demo18 
{
	public static void main(String[] args) 
	{
		Outer out = new Outer();
		out.func(4);
		out.function();
	}
}


内存解析图:



Java 之 -------------- 内部类 详解