在TIJ中有一段:As previously mentioned, if you don’t put an access specifier for class access, it defaults to package access. This means that an object of that class can be created by any other class in the package, but not outside the package. (Remember, all the files within the same directory that don’t have explicit package declarations are implicitly part of the default package for that directory.) However, if a static member of that class is public, the client programmer can still access that static member even though they cannot create an object of that class.但是我在package1中定义了一个非public类Class1,其中有一个public static的int变量t,然后在package2中定义一个public类Class2,通过**.package1.Class1.t来访问前一个package中的public静态变量,编译时不通过,报错“The type ××× is not visible”,这是为何?
可以访问它。访问修饰符 :
1.private:只对本类可见
2.默认(default):不需要修饰符,对本包可见(包访问权限)
3.protected:对所有子类和本包可见
4.public:对一切可见
1,把作用域修饰符再去看看。
你还是只看了前半段
----------------------
2,你应该去程序员英语版块,过多纠缠报错的语句有意义吗?
wuheng66888(吴恒) ( ) 信誉:100 Blog 加为好友
不定义成public类只对本包可见
-----------------------
已经说得很清楚了。。
2。静态变量通过声明所在类的对象来访问,或者直接通过类名来访问。然后,在我顶楼的那段话中,TIJ的作者认为非public类的静态public成员可以被其他程序员调用,even though they cannot create an object of that class。所以他应该是说通过类名来访问。然后我写了如下的代码://包含静态public成员的非public类
package javas.com.pzl.chap3;class Class1 {
public static int t = 10;
}//另外一个package中的public类
package javas.com.pzl.chap4;public class Class2 {
public static void main(String[] args){
System.out.println(javas.com.pzl.chap3.Class1.t);
}
}结果是不能访问。所以才有了顶楼的问题。
希望大虾们给个指点。
这很容易理解.....读英文的文章有时候只看一句不看完.
就像你说的那样,你也只读了后面一段.没读前面.
上下文联系一下,就能理解了.这里有个前提,如果你没能为类访问权限指定一个访问修饰符.
这是大前提.不是说该类的某个static成员是public的话,所有的程序员都能调用static成员.而且,这句话并没指是不是在同一个包里面.所以要考虑调用就是在大前提下:到底是默认权限还是public权限下调用.这样应该理解为什么了吧..我也在看TIJ.但是英文的多看几次,不然容易把自己转悠进去.
总得来说这句话没错.难道还有问题么?事实和理论都证明是正确的..感觉LZ有点鸡蛋里面挑骨头
但是你还是不理解我的意思,或者说你还没理解这段话本身的意思。干脆挑骨头就挑到底吧:就像你说的那样,你也只读了后面一段.没读前面.
上下文联系一下,就能理解了.
=======================================
如果不结合上下文,不会有这个帖子:)不是说该类的某个static成员是public的话,所有的程序员都能调用static成员.而且,这句话并没指是不是在同一个包里面.所以要考虑调用就是在大前提下:到底是默认权限还是public权限下调用.这样应该理解为什么了吧..
=======================================
可以简化这个问题,“even though they cannot create an object of that class.”这是后面半段话的前提。如果如你所说,在同一个包内,或者将类定义成public权限,这个前提就不存在了,我们可以很轻松的create an object of that class。也就是说,作者要说的意思是在不同的包内,而且这个类不是public的。所以我认为你误解了这段话。
最少偶看这个地方的时候没发现什么问题,是我的懒得深层次理解呢还是偶理解能力快呢。。
总之是不觉得这里有问题。
TIJ本来就是把一些概念绕来绕去了的。。每看一便都会有不同的感觉。。
很容易理解,方法的访问级别不可能会比类的访问级别还大啊。就像你家里的电视机就只可以你用,把时代推前一点也就摆在客厅里,但也是把人请回家里看。也就是说还是呆在自己的空间里的。内部的东西再大也不能大于类的本身的访问级别。
个人认为这贴结了吧。。有点浪费时间的感觉。
楼主不仅英文没学好,连中文也没学好,鉴定完毕!================
麻烦你给出鉴定过程,谢谢