本帖最后由 evanou 于 2011-12-30 21:08:56 编辑

解决方案 »

  1.   

    因为A不是public类型的类,所以不能调用A的任何方法(个人理解)
    一般来说,一个类与一个java文件一一对应。而且没有特殊需求的话我一般还是所所有的类都public了
      

  2.   

     项目     同包    同类   子类   不同包
    public   y      y     y     y
    protect  y      y     y     n
    默认       y      y     n     n
    private  n      y     n      n
    不知楼主要的是否是这!
      

  3.   

    类的修饰符有四种
    1 默认修饰符 就是前面什么都没加,只能被同一个包中的类访问,你上面的例子,不是同一个包
    2 public 公共修饰符,表示这个类可以被所有其它类访问
    3 abstract 抽象类,不能实例化对象
    4 final 最终类,不能被继承
      

  4.   


    我知道不加修饰符只能在同一个包里面访问,此时类的成员及方法不加public也能在包里面访问。
    我的意思是如果类不加修饰符,是不是类的成员和方法加不加public一点作用也没有,如果有用的话在什么情况下可以发挥作用?
      

  5.   

    我的理解是,方法和成员在类的里面,类都访问不到,肯定是访问不到成员和方法的这时你加不加public对访问不到你的类是没有作用的,当别的包中的类可以访问到这个类时,你方法不加任何修饰符,表示只有同一个包中的类才能访问到这个方法,你就得加上public
      

  6.   

    我想问的是如果你的类声明成了private的话那么你还定义它干嘛呢?那么就没有讨论的意义了,一般情况下这本就是一件没有意义的事。lz的源码没错误呀?
      

  7.   

    你一个包中怎么两个public class
      

  8.   

    按理是“如果这个类不是public声明的,那它的成员和方法声明为public就没有什么意义了。”我也困惑这个问题。我查了一些资料,都说public修饰的方法“可以被任何类访问到”,不解.
      

  9.   

    java的类有2种访问权限,public、默认
    而方法和变量有4种:public、默认、protected、private

    public意味着任何地方的其他类都能访问
    默认则是同一个包的类可以访问   很显然你这代码是在同一个包中写的吗?你好好看看访问权限吧!!
      

  10.   


    如果所有的类都public那就达不到封装的要求了。
      

  11.   

    因为你的class类不是pulic访问修饰符。
      

  12.   

    public类中的public方法就是你对外公开的接口,客户端用户对其有完全调用权限,在你生成的文档中必须有完全的类,方法描述,如java核心类库中你可以直接调用的所有类
    而包权限的(默认)类只是为同包的其他类的辅助类(可以这么认为)只能自己使用,而客户端不能调用,可以查阅下java核心类库的源代码就能有所了解了!多看看吧
      

  13.   

    当类名前面没有修饰符的时候说明他是包内可见的,他的非私有成员变量可以被同一包内的其他类访问,再有就是
    public A() {}是构造方法他的类一定是PUBLIc的,希望能帮到你!!!
     
      

  14.   

    类包含了方法
    如果你当前的这个类对另一个类都无法实例化,也就是new,那么对于这个类来说另一个类的方法设置访问权限对它没有意义。总的说,访问方法的前提是需要访问到这个类。但是对于可以访问到非public类的类来说方法的访问权限是有意义的。
      

  15.   

    类不是公有,还可以是包级私有,包内访问这个类的public可以,访问private不行
      

  16.   

    准备结贴了,感谢大家的回复。
    有些朋友没有明白我所要问的东西,我的问题不是java的类访问权限,这个我清楚,我想表达的意思是当一个类没有public修饰的时候,它的成员方法添加public修饰有没有什么意义:
    因为当类的访问权限为空的时候,它就是默认的包访问权限,因此只有在同一个包的其他类才能访问这个类,所以它的成员方法不添加public也能被同一个包的其他类所访问(除了private)。我当时的想法是在这种情况下加这个public还有什么意义,反正加不加上去都是只有同一个包内的其他类才能访问。后来仔细想了想,这个public修饰还是有很大的意义的,
    首先假设该类A 被同一个包内的其他类B继承,这个类B是public的(),因此能访问类B的其他类就能访问继承过来的public成员或方法,而不需要重载。还有如果这个类A实现了某个接口(接口的方法默认就是public),这样我们也可以调用这个接口的方法了。修改后的源码如下:
    源文件1:
    //: test1/C.java
    //定义一个带有what()的接口
    package test1;public interface C {
    void what();
    }源文件:2:
    //: test1/B.java
    package test1;
    //类A实现了接口C
    class A implements C{
      public A() {}
      public void what() {
      System.out.println("Class A");
      }
    }public class B {
      private A a = new A();
      //返回一个类A的实例对象
      public A getA() { return a;}
    }源文件3:import test1.*;
    //外部类调用通过接口C来实现类A的what()方法调用
    public class Test {
      public static void main(String[] args) {
      B b = new B();
      C c = b.getA();
      c.what();
      }
    }
    编译通过,运行后输出  Class A