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、创建内部类并不依赖于外围对象的创建;