书也不完全正确, 呵呵. 去掉Public之后, 对于同一个包来说是可见的, 估计你这两个文件是在一个目录下吧. 不同Package的话, 不可访问.

解决方案 »

  1.   

    Java默认的访问控制权限是包级的,也就是说一个package内的class都可以访问,但package以外的不可访问!private是拒绝访问的!你的PackageTest如果放在test下是可以运行的!
      

  2.   

    书上并没有说错,我想你是把这两个类放在了同一个包下吧,你把PackageTest和ABC放在不同的包下,然后把show的public属性去掉,你在PackageTest里调用show就会出错
      

  3.   

    如果在分在两个包的话,没有public修饰 show方法肯定不能被使用,这一点不用怀疑,你能使用可能两个类在一个包内,PackageTest类放到别的路径下试试你就知道了
      

  4.   

    我没有搞错。
    ABC.class in d:\java\test\
    PackageTest.java in d:\java\
    难道这也是在一个包里?
      

  5.   

    我没有搞错。
    ABC.class in d:\java\test\
    PackageTest.class in d:\java\
    难道这也是在一个包里?
      

  6.   

    你在classpath里设置路径d:\java\了吗
      

  7.   

    关键不是文件保存的位置,而是java文件中声明的package
      

  8.   

    ChDw(米) java文件如上
      realzealy(国米无敌) 没有,我只设了 set classpath=.;d:\jdk\lib;d:\jdk\lib\dt.jar
    ;d:\jdk\lib\tools.jar不过我编译的时候用了 javac -d . ABC.java 自动创建文件夹test,错在哪儿呢?
      

  9.   

    我测试过,去掉public后是不行的,是不是你去掉了public后没有重新编译?
      

  10.   

    如果2个class是在同一个包中,去掉public当然没关系!!!
    默认的访问权限相当于C++的friend!!!
    在不同包中只有public才能相互访问!!!
      

  11.   

    你没有设的话package test;这句就没用,因为你package后的路径,是接在classpath路径后的
    系统只会在classpath下找寻package的文件夹,你在classpath里设置路径d:\java\ 类文件保持不动再试试
      

  12.   

    caojinfeng() 我把.class文件都删了,重新编译的还不行,奇怪!
     
    file1 d:\java\ABC.javapackage test;
    public class ABC{
       int x=5;
       public void show(){
          System.out.println(x);
       } 
    }file2 PackageTest.javaimport test.*;
    class PackageTest{
       public static void main(String args[]){
          ABC obj=new ABC();
          obj.show();
       }
    }javac -d . ABC.java
    生成文件夹及文件为d:\java\test\ABC.class
    javac -d PackageTest.java
    生成文件夹及文件为d:\java\PackageTest.class
    java PackageTest
    能成功显示5,郁闷,why?