1、  定义内部类后,实际上,内部类获取外部类的数据、及method访问权限;可直接访问;而外部类也可以直接访问;外部类可以通过内部类对象.method名称;内部类对象.field.名称来访问使用;双向不受控于private限制;

2、  我们特别强调类之间关系时,可考虑内部类;

1)  当外部类定义为public时,内部类也具备public属性;

2)   

 2、匿名内部类(后面的理解,本质上是匿名对象)的理解:不是没有类的名字,是创建没有名称的对象/实例,“利用内部类创建不具名称的对象,并利用它访问到类里面的成员”,

(
new classname (para)   //这里的para是常规对象创建时可能用到的para,根据构造函数确定
{
返回值类型 method名称(para1,para2.。。。。)
{
//method body
}
}
).method名称(para1,para2,para3。。。。)



:思考,创建了没有名字的对象,不是没有名字的类,类不可能没有名字;

:本质,是在具备类定义(可以是内部类,也可以是外部类)的基础上,创建没有名字的对象;为了补全代码,所以出现了内部类(个人理解,内部对象更为合理);

主要用途,用于补充内部类没有定义到的method方法,并有效简化代码;

class Inner{
	
}

public class TestInner {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int i=(
				new Inner()
				{
					int get_num()
					{
						return 100;
					}
				}
				).get_num();

	}



我们为什么需要内部类?

1、一般来说,内部类集成某个类或者实现某个接口,内部类提供了一种进入其外围类的方法;

2、每个内部类都能独立的继承一个(接口的实现),无论外围类是否继承了某个接口的实现,对内部类没有任何影响;

3、内部类可以具备多个实例,而且多个实例可以以不同的方式实现同一个接口,或者继承同一个类;

4、内部类可以具备多个实例,每个实例都有自己的状态信息,并且与外围类对象的信息相互独立;

4、创建内部类并不依赖于外围对象的创建;