社区
Java SE
帖子详情
看java编程思想时遇到的一个内部类的问题
donaroo
2006-11-28 09:10:06
原文:“嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。”
这里指的普通类的字段与方法只能放在类的外部层次是什么意思,内部类有自己的方法字段阿,这里没明白,所以后边那句不可以有static的东西也不明白。请各路大虾指点啊。
...全文
540
17
打赏
收藏
看java编程思想时遇到的一个内部类的问题
原文:“嵌套类与普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。” 这里指的普通类的字段与方法只能放在类的外部层次是什么意思,内部类有自己的方法字段阿,这里没明白,所以后边那句不可以有static的东西也不明白。请各路大虾指点啊。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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就业培训教程 张孝祥写的.上面写的挺清楚的
Java
面向对象编程
Java
编程基础是本门课程的前导课程,学习本门课程需要先学习
Java
基本语法,本门课程系统介绍了
Java
面向对象的内容,包括继承,多态,抽象类,接口,
内部类
,构造函数等知识,课程没有一句废话,能够让你用最快的速度...
常见的
Java
编程思想
有哪些
java
所给予的语言之一smalltalk的五个特征: ...当正在试图开发或理解
一个
程序设计
时
,最好的方法之一就是将对象想象为“服务提供者”。目标就是去创建(最好是在现有代码库中寻找)能够提供理想的服务来解决问
java
编程思想
阅读笔记(一)
近些日子由于需要,在Android上写了个利用加速度传感器的小程序,忽然发现自己的
java
基础忘得差不多了,于是找了本《
java
编程思想
》决定好好补一补;没想着还没看多少天呢,用的手机给丢了,这
一个
伤心啊,平
时
用啊...
24.
JAVA
编程思想
——违例差错控制
24.
JAVA
编程思想
——违例差错控制
Java
的基本原理就是“形式错误的代码不会运行”。 与C++类似,捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,并非所有错误都能在编译期间侦测到。有些
问题
必须...
47.
java
编程思想
——创建窗口和程序片 AWT
47.
java
编程思想
——创建窗口和程序片 AWT 在
Java
1.0 中,图形用户接口(GUI)库最初的设计目标是让程序员构建
一个
通用的GUI,使其在所有平台上都能正常显示。 但遗憾的是,这个目标并未达到。事实上,
Java
1.0 ...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章