看java编程思想时遇到的一个内部类的问题

donaroo 2006-11-28 09:10:06
原文:“嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。”


这里指的普通类的字段与方法只能放在类的外部层次是什么意思,内部类有自己的方法字段阿,这里没明白,所以后边那句不可以有static的东西也不明白。请各路大虾指点啊。
...全文
540 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
heguo 2006-11-29
  • 打赏
  • 举报
回复
就因为这样,所以对Java语法彻底失望,不如C#简明。


Outer.Inner testInner;只能视为特例看待了,总不能这样子引用内部类吧:outerInstance.Inner? //没试过,Java总会有千奇百怪的语法,说不定也行
donaroo 2006-11-29
  • 打赏
  • 举报
回复
To lbfhappy(千里冰封)

因为Inner不是静态成员,它虽然也一个类,但是它对于Outer类来说,它只是一个普通的成员而已,既然是一个成员,那么就不可能用类名直接来引用,而要通过对象来引用


Inner可不可以看做类型,Outer.Inner testInner; 可以这样定义一个引用,为什么不可以直接使用Outer.Inner这个类型的静态变量呢
千里冰封820 2006-11-29
  • 打赏
  • 举报
回复
普通内部类是不可以有非静态成员,这确实是设计的问题
SUN当初这样设计就是为了顺从静态的意思
如果内部类有静态成员的话,就违背了引用静态成员还要实例化类的这一初衷
To donaroo

我知道Outer.Inner.staticField这样做语法上是通不过的 只是
Outer.staticField1,可以这样访问,不需要实例化Outer,那同样Outer.Inner.staticField也都不需要实例化Outer和Inner,毕竟staticfield在程序中是唯一的,即便也许会有很多个Inner的实例。
已经完全脱离语法了,只是在想java为什么不这样设计

因为Inner不是静态成员,它虽然也一个类,但是它对于Outer类来说,它只是一个普通的成员而已,既然是一个成员,那么就不可能用类名直接来引用,而要通过对象来引用
haisenmai 2006-11-29
  • 打赏
  • 举报
回复
up一个
donaroo 2006-11-29
  • 打赏
  • 举报
回复
看看还有没有其他高手给什么意见,晚上结贴
donaroo 2006-11-28
  • 打赏
  • 举报
回复
想知其所以然
kai888 2006-11-28
  • 打赏
  • 举报
回复
子类肯定没有STATIC了,只要父类才有的,就是外部类。
donaroo 2006-11-28
  • 打赏
  • 举报
回复
先谢谢回复,我想问的不是嵌套类和内部类的区别,而是"普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段"这里不理解
galant2008 2006-11-28
  • 打赏
  • 举报
回复
嵌套类是被声明为静态(static)的内部类,
它可以不依赖于外部类实例被实例化。

内部类需要在外部类实例化后才能实例化。
Chinajash 2006-11-28
  • 打赏
  • 举报
回复
To donaroo
你说的也许有道理, 我也不知道SUN为什么要这样设计这个语言的细节:(
"在Outer实例化之前,Outer的非静态的东西还都不存在,这么理解??",我觉得可以这么理解
donaroo 2006-11-28
  • 打赏
  • 举报
回复
To Chinajash()

我知道Outer.Inner.staticField这样做语法上是通不过的 只是
Outer.staticField1,可以这样访问,不需要实例化Outer,那同样Outer.Inner.staticField也都不需要实例化Outer和Inner,毕竟staticfield在程序中是唯一的,即便也许会有很多个Inner的实例。
已经完全脱离语法了,只是在想java为什么不这样设计

有些乱,是不是从逻辑上讲,在Outer实例化之前,Outer的非静态的东西还都不存在,这么理解??
Chinajash 2006-11-28
  • 打赏
  • 举报
回复
To donaroo,如果Inner是非静态的内部类,就不能通过下面的方式去访问他的静态field
Outer.Inner.staticField
因为首先是不能通过Outer.Inner去获得Inner的引用的,这就好比不能用类去访问其内部的非静态属性一样.只能用Outer的对象实例去访问Inner
linzhongren 2006-11-28
  • 打赏
  • 举报
回复
热切期待已工作程序员加入本程序员群:31626550,
如果已经工作请附加:程序员!
如果尚未工作,也欢迎加入!
donaroo 2006-11-28
  • 打赏
  • 举报
回复
Chinajash() ( ) 信誉:100 Blog 2006-11-28 15:28:32 得分: 0


Static filed的本意是不需要创建任何类型实例的情况下就可以访问,但如果在非静态内部类里面包含Static field,为了访问这个Static filed,需要先创建外围类的实例,这违背了Static field的本意。



如果说违背了Static field的本意的话,直接用类名去访问不用对象不可以吗,就像普通类那样。Outer.Inner.staticField
Chinajash 2006-11-28
  • 打赏
  • 举报
回复
普通的内部类是可以再包含嵌套类的,只不过这样做实在没有什么意义
Chinajash 2006-11-28
  • 打赏
  • 举报
回复
Static filed的本意是不需要创建任何类型实例的情况下就可以访问,但如果在非静态内部类里面包含Static field,为了访问这个Static filed,需要先创建外围类的实例,这违背了Static field的本意。
gongyali2005 2006-11-28
  • 打赏
  • 举报
回复
强烈建议你看看  JAVA就业培训教程  张孝祥写的.上面写的挺清楚的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧