A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 年轻的棒棒 中级黑马   /  2013-5-21 08:48  /  1988 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Static Nested Class 和 Inner Class的不同

5 个回复

倒序浏览
额.........这位兄弟,你想问什么问题的话可以具体点,你这么问的这么广就不是挺好的,
                                                                                               ----------黑马云青年  闹钟只能叫醒躯壳,梦想才能叫醒灵魂
回复 使用道具 举报
       nested class 是合成型聚集关系(Composite Aggregation)的另一种表达方式,
也就是说nested class也可以用Aggregation表达出来,但是,nested class更加精
确地表达了一种专用的、紧耦合的关系,尤其在代码生成时,nested class在Java
中映射成inline class。比如,计算机专用开关电源类可以作为计算机类的nested class,
但是,电池组类就不一定适合作为计算机类的nested class,因为,电池组类表述的
是一个过于通用的对象,可能还被包含(Aggregation)于模型中的其他设备对象。
class A nested in class B,则说明A是一个nested class,一般A是用来完成B中的
某种重要功能。
      Inner Class是静态内部类,意味着a创建一个static内部类的对象,不需要一个
外部类对象,b不能从一个static内部类的一个对象访问一个外部类对象。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 鼓励下,很好

查看全部评分

回复 使用道具 举报
问题解决就再次编辑更改问题类型,没有解决继续追问
回复 使用道具 举报
曹睿翔 发表于 2013-5-22 23:16
问题解决就再次编辑更改问题类型,没有解决继续追问

为啥不给俺的回答加个技术分呢?:'(
回复 使用道具 举报
在方法外部定义的内部类前面可以加上static关键字,从而成为Static Nested Class,它不再具有内部类的特性,所有,从狭义上讲,它不是内部类。Static Nested Class与普通类在运行时的行为和功能上没有什么区别,只是在编程引用时的语法上有一些差别,它可以定义成public、protected、默认的、private等多种类型,而普通类只能定义成public和默认的这两种类型。在外面引用Static Nested Class类的名称为“外部类名.内部类名”。在外面不需要创建外部类的实例对象,就可以直接创建Static Nested Class,例如,假设Inner是定义在Outer类中的Static Nested Class,那么可以使用如下语句创建Inner类:

Outer.Inner inner = new Outer.Inner();

由于static Nested Class不依赖于外部类的实例对象,所以,static Nested Class能访问外部类的非static成员变量。当在外部类中访问Static Nested Class时,可以直接使用Static Nested Class的名字,而不需要加上外部类的名字了,在Static Nested Class中也可以直接引用外部类的static的成员变量,不需要加上外部类的名字。

在静态方法中定义的内部类也是Static Nested Class,这时候不能在类前面加static关键字,静态方法中的Static Nested Class与普通方法中的内部类的应用方式很相似,它除了可以直接访问外部类中的static的成员变量,还可以访问静态方法中的局部变量,但是,该局部变量前必须加final修饰符。
                            黑马云青年为您解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马