请教同一包内类的访问权限!怎么调试也出错!!!!

lucy211 2003-02-28 11:12:13
同一包内只要类的访问权限词不是private and protected,即可相互访问,请看下面的代码:两个类Cookie 和
package c05.dessert;

public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
protected void bite() { System.out.println("bite"); }
} ///:~

package c05.dessert;
import c05.dessert.*;

public class Dinner {
public Dinner() {
System.out.println("Dinner constructor");
}
public static void main(String[] args) {
Dinner y = new Dinner();
Cookie x = new Cookie();
x.bite();
}
} ///:~
编译时总出错如下:
Dinner.java:14: cannot access Cookie
bad class file: .\Cookie.class
class file contains wrong class: c05.dessert.Cookie
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
Cookie x = new Cookie();
^
1 error
...全文
48 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xujinglei 2003-06-13
  • 打赏
  • 举报
回复
这种问题在书上都写的很清楚的啊!你如果直接不能执行把包的名字加上就可以了,如果一个目录下不能访问classpath里把.加上就可以了,你这个程序没什么好讨论的。
lucy211 2003-03-07
  • 打赏
  • 举报
回复
大家赶紧来讨论一下这个问题,我好给分揭帖呀!
lotofu 2003-03-04
  • 打赏
  • 举报
回复
好了,行了!!
lucy211 2003-03-04
  • 打赏
  • 举报
回复
再次感谢各位!!我的class总算运行顺利了,可我实在不明白下面命令的区别:
d:\code\qiujava\c05\dessert\java Dinner;
d:\code\qiujava\java c05.dessert.Dinner;
d:\code\qiujava\java c05\dessert\Dinner;
xujinglei 2003-03-04
  • 打赏
  • 举报
回复
你把bit()的修饰符换成public或者干脆去掉应该就可以了,因为protected说明只有继承了它的子类可以使用,明白吗?你这样是无法调用该类的bit()方法的啊!!!
bbsand 2003-03-04
  • 打赏
  • 举报
回复
teaky2002说的对,我最后一行写错了应该是象teaky说的那样写,你再试试,应该没问题了

还按照我说的那样编译,然后按照teaky说的那样运行,应该就没问题了,好运~

我开始也遇到这样的问题了,就是这样解决的,呵呵。

teaky2002 2003-03-03
  • 打赏
  • 举报
回复
回复人: lucy211(蓝鸟) ( ) 信誉:100 2003-3-3 16:28:57 得分:0


回复人: lucy211(蓝鸟) ( ) 信誉:100 2003-3-3 16:28:57 得分:0

执行命令如下:
D:\code\qiujava\c05\dessert>java Dinner;
Classpath路径设置如下:
.;c:\j2sdk\lib\dt.jar;c:\j2sdk\lib\tools.jar;D:\code\qiujava;
我觉得应该没有什么问题了吧!

如果你在这样运行,就可以了
D:\code\qiujava\>java c05.dessert.Dinner
注意当前目录
lucy211 2003-03-03
  • 打赏
  • 举报
回复
bbsand,招你说的做了,还是出现同样的错误!!!,高手,help,help!!
bbsand 2003-03-03
  • 打赏
  • 举报
回复
你到d:\code\qiujava下编译

d:\code\qiujava>javac c05\dessert\cookei.java
d:\code\qiujava>javac c05\dessert\dinner.java

然后运行:
d:\code\qiujava>java c05\dessert\dinner
lucy211 2003-03-03
  • 打赏
  • 举报
回复
执行命令如下:
D:\code\qiujava\c05\dessert>java Dinner;
Classpath路径设置如下:
.;c:\j2sdk\lib\dt.jar;c:\j2sdk\lib\tools.jar;D:\code\qiujava;
我觉得应该没有什么问题了吧!
lucy211 2003-03-03
  • 打赏
  • 举报
回复
或许楼上说的有道理,执行java Dinner后的错误信息为:
Exception in thread "main" java.lang.NoClassDefFoundError: Dinner (wrong name: c
05/dessert/Dinner)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:246)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
yeahspyme 2003-03-02
  • 打赏
  • 举报
回复
我的计算机环境下可以编译运行成功。
环境:jdk1.4+w2k
我怀疑你的Classpath设置有问题,你先明确一下classpath的设置是否正确。
以下代码肯定没有问题,能够正常编译运行。
//Cookie.java
package c05.dessert;

public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
protected void bite() { System.out.println("bite"); }
} ///:~
//Dinner.java
package c05.dessert;
import c05.dessert.*;

public class Dinner {
public Dinner() {
System.out.println("Dinner constructor");
}
public static void main(String[] args) {
Dinner y = new Dinner();
Cookie x = new Cookie();
x.bite();
}
} ///:~

bighappy 2003-03-02
  • 打赏
  • 举报
回复
java c05.dessert.Cookie
当然不能执行,因为没有main函数
quietwater 2003-03-02
  • 打赏
  • 举报
回复
去掉import c05.dessert.*,编译能通过,但不能执行!!请各位指教!
java c05.dessert.Cookie
ok!!!!!!!!!!!!!
iceshape1 2003-03-02
  • 打赏
  • 举报
回复
你的java文件的路径在哪都没有关系
编译器会在编译的时候在你的java文件路径下生成package表示的路径
如你的 java文件放在..\java目录下,你的文件里有:package mypackage.myjava;
编译后会有一个这样的目录..\java\mypackage\myjava\
class文件存放在此
如果运行的话需要进入该路径或者加入运行参数
bighappy 2003-03-02
  • 打赏
  • 举报
回复
import c05.dessert.*;加不加都无所谓的
bighappy 2003-03-02
  • 打赏
  • 举报
回复
import c05.dessert.*;
你的Cookie编译成class文件了吗??
huzijing 2003-03-01
  • 打赏
  • 举报
回复
错误信息是什么?
lucy211 2003-03-01
  • 打赏
  • 举报
回复
去掉import c05.dessert.*,编译能通过,但不能执行!!请各位指教!
lucy211 2003-02-28
  • 打赏
  • 举报
回复
谢谢大家,你们说得我都做了呀,两个class都在目录c05\dessert下,而且我在classpath中已经设到c05目录上一级了.去掉import c05.dessert.*显然不行的。
加载更多回复(5)

62,623

社区成员

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

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