Java 访问控制的问题(public,private,protected,(default))!讨论讨论!

gularess 2002-06-26 11:25:07
说来惭愧,到今天才明白了protected居然是同一个包中都可以访问到,本来以为只有子类能访问到,所以觉得java的语法很有些误导。
由此产生些问题,如果有一个变量只能子类访问,而包内不能访问,用什么修饰符?这种还是比较常见的控制难道就没有办法实现?
由此又产生了一个问题,到底包是什么概念,感觉就像一个大类:)
大家讨论讨论!分少不了大家!
...全文
367 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gularess 2002-06-26
  • 打赏
  • 举报
回复
to zfluo:有一个包内可访问,子类不能访问
的修饰符啊?不加任何修饰符的默认就是这种情况。但你前面的说法还是有道理的。只不过我说的情况应该也是存在的:就是只能子类访问,而包内不能访问。

有一种理解,同一个包肯定是有一个人或小组开发的,其中的访问控制要求比较低,基本上像开发一个类文件一样,你不用过多考虑有哪些变量会被误改等。当基于一种假设的考虑一般很难做到完整!举个例子,如果有一个变量是打算子类继承的,但我不希望一个开发小组的人不小心直接改动它,如果那种情况下束手无策的话,让人失望。

其实C++很多特性如多重继承都是在发现一种情况不能表达后加进去的,你可以不用或很少用或尽量不用,但你不能想用的时候发现根本没办法!:(
zfluo 2002-06-26
  • 打赏
  • 举报
回复
因为对于同一个包来说,类之间的关系还是比较密切的,而
java中有没有象c++那样使用friend,也就是扩充了protected
来代替friend吧。而且由于是在同一个包中的,进行控制也
很容易,就算将来要做修改,其范围也只是同一个包而已。
误导与否,只是看你的第一印象是什么,如果一开始你就
被告知protected就是包内可访问的,你就会觉得c++的protected
是在误导了。其实严格的说来,包的范围内进行控制,比
子类范围内进行控制更容易,因为一个包的修改更新,一般都是同
一个组织进行的,而子类,就有可能有成千上万的用户了,
那么这样,是不是又要提供一个包内可访问,子类不能访问
的修饰符呢?不同的人有不同的需要,要提供一个大而全的
语言,适合所有人的需要,必然导致语言的复杂性的增加,
入门的门槛必然就会提高,这样的话,java就不会有今天
这样的发展。
alphazhao 2002-06-26
  • 打赏
  • 举报
回复
其实包就是一个工程,主要是便于管理所用,至少我是这么理解的(jb新建一个工程,就是一个package,将其它零碎删除都行)
gularess 2002-06-26
  • 打赏
  • 举报
回复
to cat_hangzhou(cat)声明一点,默认是default,与protected的区别就是不能被子类用!
区别我差不多都知道了,只不过觉得有疑问,想证实一下是不是自己孤陋寡闻!
继续继续!
cat_hangzhou 2002-06-26
  • 打赏
  • 举报
回复
声明称private,或者干脆不加(默认是private)。只能该class中访问。
包,给我的感觉象是工程
是介于系统其他文件和自身class之间的层次,不象类内部那么大的关联度,也不象系统其他文件之间没有关系。
呵呵,或者说象c里面的.a吧
关于public等之间的区别,《think in java》第一章有清楚的描述
yhc0125 2002-06-26
  • 打赏
  • 举报
回复
个人认为包是一些类的集合,就像MFC的类库一样,提供一些类的方法。

至于访问控制的问题,看看java编程思想吧。

62,614

社区成员

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

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