包的权限问题,100分

w678678786 2005-07-25 02:26:06
包的权限问题,请教
包里有一个public类PA

public class PA{
public void f(){
System.out.println("PA.f()");
}
}

它的方法也是public的

然后在包外面有一个类A, A类import类PA,执行PA的方法f,现在一切正常

假如把类PA的public 去掉
类A 编译不过去,也正确

问题来了

第一次PA和它的方法是public的,没问题,这时候,去掉PA的public,只编译PA这个类;A类还能访问PA

不懂了,请教各位

...全文
171 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jara 2005-07-25
  • 打赏
  • 举报
回复
Marcus-Z 2005-07-25
  • 打赏
  • 举报
回复
public class CanGf{
public boolean canGf(){
String a="曹*";
String b="我";
if (a.equals(b))
return true;
else return false;
}
}
believefym 2005-07-25
  • 打赏
  • 举报
回复
可能之前的class没有更新
w678678786 2005-07-25
  • 打赏
  • 举报
回复
我觉得,即使编译环境不一样,思想也是一样的。

比如,A是底层程序员,B是客户程序员,A写了一套组件给B,B用的很好,有一天,A由于某种原因不想叫B用了,于是将原来public的改写成private,而B还是用原来那套,并没有重新编译,结果B仍然使用A提供的组件。

这就是问题,除非A改变思路,就是提供给客户程序员的组件肯定不改变,但是一旦A不想B继续用,单单改变private的方法就有问题了

哪位高手能解释一下?多谢
lilinking 2005-07-25
  • 打赏
  • 举报
回复
是的
我在Eclipse中无法模仿你所出现的情况。
Eclipse中是自动编译的,好像!
laughsmile 2005-07-25
  • 打赏
  • 举报
回复
这跟编译器环境有关,你使用的如果是eclipse或者jbuilder就没有这个问题.
可能JDK编译器把权限检查放在编译期.
OO00 2005-07-25
  • 打赏
  • 举报
回复
是不是包没有更新,没有重新生成class
lei198203 2005-07-25
  • 打赏
  • 举报
回复
谁能解释这个问题?

╭═══╮ ╭═══╮ ╭══════╮   
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮  
 ║ ║   ║ ║   ║ ║  ╰╮╰╮ 
 ║ ║   ║ ║   ║ ║   ║ ║ 
 ║ ║   ║ ║   ║ ║   ║ ║ 
 ║ ║   ║ ║   ║ ║  ╭╯╭╯ 
 ║ ║   ║ ║   ║ ╰══╯╭╯  
 ║ ║   ║ ║   ║ ╭═══╯   
 ║ ║   ║ ║   ║ ║       
 ║ ║   ║ ║   ║ ║       
 ║ ║   ║ ║   ║ ║       
 ╰╮╰╮ ╭╯╭╯   ║ ║       
  ╰╮╰═╯╭╯   ╭╯ ╰╮      
   ╰═══╯    ╰═══╯
rainclick 2005-07-25
  • 打赏
  • 举报
回复
嗯,是不是JAVA把可见性检查放在代码编译期,并且只在调用端检查造成的?
lei198203 2005-07-25
  • 打赏
  • 举报
回复
我刚试了一下,确实是这个样子.B确实还能读到A里的private值, 太奇怪了.
w678678786 2005-07-25
  • 打赏
  • 举报
回复
晕,没人回答呢?说简单点吧

如果同包的两个类A B

class A{
public int i;
}

那么B里直接能读到A的i

class A{
private int i;
}
那么B读不到A里的i

以上说得都对吧?

问题是 当A的i是public,B能读他的时候,(此时已有A.class B.class)
这时候你把A的i改成private,并且只编译A
然后你运行java B, 这时候 B能读到A里的 private的i

不明白乐
w678678786 2005-07-25
  • 打赏
  • 举报
回复
PA没有了public 外面的类肯定访问不到!

可是A能够访问没有了pubilc的PA,

各位请把问题看完全
lilinking 2005-07-25
  • 打赏
  • 举报
回复
PA不是public的外面的类就看不到他了。
只有同一个包中的其他类才能看到PA
w678678786 2005-07-25
  • 打赏
  • 举报
回复
假如把类PA的public 去掉
类A 编译不过去,也正确

没有了public当然编译不过去了,所以正确

继续看下面的话
loreorion 2005-07-25
  • 打赏
  • 举报
回复
类A 编译不过去,也正确??
编译都不过,还怎么正确

62,614

社区成员

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

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