如题:
class A,class B,class C为三个不同的文件,首先在class B中声明class A,把“123”放入A的setPerID()方法中。问:在class C中如何调用class B的getPerID()方法(“得到答案123”)?
一下是我做的程序,我知道在class C中调用有问题,但不知道如何改,请高手解答,谢谢
class A{
...
public void setPerID(String sPerID) {
  this.sPerID = sPerID;
 }
public String getPerID() {
  return sPerID;
 }
}
class B{
 A a=new A();
 a.setPerID("123");
}
class C{
 A a=new A();
 a.getPerID();
}

解决方案 »

  1.   

    C中间你重新new了一遍,就把之前set的数据在内存中的引用释放掉了...当然得不到了
      

  2.   

    二楼的,我知道在class C中用new是不对的,但是我想问问,怎么改那?
      

  3.   

    继承写吧class B extends A {
      public void runB(){
        super.setPerID("123");
      }
    }class C extends B {
      public void runC(){
        super.getPerID();
      }
    }然后main里面 
    A type = new C();
    来实现
      

  4.   

    楼上的做法是对的  确实可以达到题目的要求
    但是我觉得在实际应用中,灵活性不是很好
    可以这样/**  方法一: 把属性声明为静态  **/
    class A
    {
         private static String number = "";
    }class B
    {
         public void setPerID() {
              A.number = "123";
         }
    }class C
    {
        public String getPerID() {
             return A.number;
        }
    }/**  方法二: 创建类A的引用  **/
    class A
    {
        private String number = null;
        public void setPerID(String str) {
            number = str;
        }    public String getPerID() {
            return number;
        }
    }class B
    {
        A a = null;
        public void setA(A aa) {
            a = aa;
        }    public void setPerId(String str) {
            a.setPerId(str);
        }
    }class C
    {
        A a = null;
        public void setA(A aa) {
            a = aa;
        }    public String getPerId() {
            return a.getPerId();
        }
    }其实可以把过程写得更加简单
    class B
    {
        public void setPerId(A a, String s) {
            a.setPerId(s);
        }
    }
    class C
    {
        public String getPerId(A a) {
           return a.getPerId();
        }
    }或者在构造器里写参数Aclass B
    {
        private A a;
        public B(A aa) {
            a = aa;
        }
        .........
    }class C
    {
        private A a;
        public C(A aa) {
            a = aa;
        }   .......
    }
      

  5.   

    在class C中如何调用class B的getPerID()方法(“得到答案123”)?那B必须要保留一个sPerID变量,也就是说如果不用继承,则要在B中添加一个sPerID变量,但B中又没有setPerID方法,除了向A继承外,只能在B中添加额外的方法,这样等于再造一个A,实在没有意义注:如果A中的setPerID有一个返回量会好很多,但恰巧又是void
      

  6.   

    SUN_Demon()好主意,创建引用的确是一条路子,我想如果源码可以改的话,还可以考虑用内部类来做,直接把B,C嵌入A中,直接去调A的sPerID
      

  7.   

    我写的第一个方法 是把A的属性声明为静态的
    那么不管在那里修改访问A的number属性  其结果都会是最后修改的字符串第二个方法  是直接引用原来的对象
      

  8.   

    class A{
    ...
    public void setPerID(String sPerID) {
      this.sPerID = sPerID;
     }
    public String getPerID() {
      return sPerID;
     }
    }
    class B{
     A a=new A();
     a.setPerID("123");
    }
    class C{
     private A a
     C(A aa){
       this.a=aa;
    }
     public String getPerAID() {
      return a.getPerID();
     }
     
    }
      

  9.   

    内部类可以这样做class A {
    private String sPerID;

    public void setPerID(String sPerID) {
    this.sPerID = sPerID;
    }
    public String getPerID() {
    return sPerID;
    }
    class B {
    public void runB(){
    setPerID("123");
    }
    }
    class C {
    public String runC(){
    return getPerID();
    }
    }
    }然后main里面这样做 A a = new A();
    A.B ab = a.new B();
    ab.runB();
    A.C ac = a.new C();
    System.out.println(ac.runC());