黑马程序员技术交流社区

标题: StaticNested Class 和 Inner Class的不同 [打印本页]

作者: 小小6456    时间: 2014-5-18 20:54
标题: StaticNested Class 和 Inner Class的不同
求解答大神们。。。。。。。。。。。。。
作者: 墨香    时间: 2014-5-18 21:13
1、从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系;而静态嵌套类则没有上述关系,它只是位置在另一个类的内部,因此也被称为顶级嵌套类。
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它,静态嵌套类仅能访问外部类的静态成员和方法。
class Outer
{
       static class Inner{}
}
class Test
{
       public static voidmain(String[] args)
       {
              Outer.Inner n =new Outer.Inner();
       }
}
在静态方法中定义的内部类也是StaticNested Class,这时候不能在类前面加static关键字,静态方法中的StaticNested Class与普通方法中的内部类的应用方式很相似,它除了可以直接访问外部类中的static的成员变量,还可以访问静态方法中的局部变量,但是,该局部变量前必须加final修饰符。
为什么需要内部类:典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。

2、匿名内部类编辑顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字,匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:
只用到类的一个实例 ;
类在定义后马上用到;
类非常小(SUN推荐是在4行代码以下);
给类命名并不会导致你的代码更容易被理解。
在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法,匿名内部类不能定义任何静态成员、静态方法,匿名内部类不能是public,protected,private,static,只能创建匿名内部类的一个实例,一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效;








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2