1.当内部类定义在外部类的成员位置上,而且非私有,可以被外部其他类访问。
格式:外部名.内部类名 变量名=外部类对象.内部类对象Outer.Inner inner=new Outer().new Inner();
2.当内部类在成员位置上,就可以被成员修饰符所修饰。比如可以用private修饰会将内部类在外部类中进行封装,用static修饰后内部类就具有static的特性。当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。
在外部其他类中,直接访问static内部类中的非静态成员可以用new outer.Inner().function()。
在外部其他类中,直接访问static内部类中的静态成员可以用outer.Inner().function()。
注意:当内部类中定义了静态成员,该内部类必须是static的。当外部类中的静态方法访问内部类时,内部类必须也是static的。
1.匿名内部类就是没有名字的内部类,其实就是内部类的简写格式。匿名内部类就是一个匿名子类对象,可以理解为带内容的对象。
2.什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:
·只用到类的一个实例;
·类在定义后马上用到;
·类非常小(SUN推荐是在4行代码以下);
·给类命名并不会导致你的代码更容易被理解。
3.使用匿名内部类的原则:
a.匿名内部类不能有构造方法;
b.匿名内部类不能定义任何静态成员、方法和类;
c.匿名内部类不能是public,protected,private,static;
d.只能创建匿名内部类的一个实例;
e.一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类(内部类必须继承一个类或者实现接口);
4.匿名内部类的格式:new 父类或者接口(){定义子类的内容}
注意:因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。