我原贴说的不太清楚,我重写个小例子. 以下每个class 都是一个单独的文件:
为什么我不能在hello class 里用c.display()? 如果想这么做,该怎么办? 不用继承和静态方法.
test class里的display方法调用的是hello主方法里构建的a,b对象.
有这个问题的原因是,我之前写的小程序基本上都是两个文件,一个实现一个函数,甚至所有的class都是在一个文件里,这样根本不会有这个问题.  
但当要求变成符合OO原则, 数据封装等要求后, 问题就出来了. 不在同一个文件了.  砸办?
public class hi {
    private String n;
   
    public hi(String n){
        this.n=n;
    }
   
    public String getString(){
        return this.n;
    }
}public class hello {
       public static void main(String[] args) {
        
        
            hi a = new hi("hello");
        
            hi b = new hi("world");
               
        
           
            test c = new test();
        
            c.display();
   
       }
}
public class test {           public void display(){
        
               System.out.println(a.getString());
               System.out.println(b.getString());
   
       }}

解决方案 »

  1.   

    test类里面没有hi类的实例,他没有这个成员,当然不能display了
      

  2.   

    首先,如果你想这三个类在同一个文件,你的类只能有一个是public的,而且这个public的类名跟文件名一样才行,比如,如果你的文件名是hello.java,那你只有
    class hi{}
    class test{}
    public class hello{}
    这样,只有一个public的
    其次,你Test类里的变量a、b是从哪里来的?
    你在test类里定义的变量不能直接用在另一个类里,类具有封装性
      

  3.   

    http://baike.baidu.com/view/28155.htm
    一开始好像有点懂~但是现在你越说我越不懂你是要怎么样了~
    OO设计原则难道不是这样的么?
    package com.tb.test;/**
     * @author king
     * @date 2010-4-23
     * @since JDK1.6
     */
    public class User {
    private String name; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
    }
    package com.tb.test;/**
     * @author king
     * @date 2010-4-23
     * @since JDK1.6
     */
    public class Check { public String checkName(String str1) {
    return "要求检查的name:"+str1;
    }
    }
    package com.tb.test;public class main { public static void main(String[] args) {
    Check dao = new Check();
    User user = new User();
    user.setName("ABC");
    System.out.println(dao.checkName(user.getName()));
    }
    }
      

  4.   

    不是很明白你的意图   你的test类连编译都不能通过
    你把test类改成下面这样看看  不知道是不是你想要的public class test {   
    //既然需要hi的对象a,b那就通过参数传过来吧
            public void display(hi a,hi b){
            
                   System.out.println(a.getString());
                   System.out.println(b.getString());
       
           }}
      

  5.   

    public void display(){
            
                   System.out.println(a.getString());
                   System.out.println(b.getString());
       
           }你这个里面,a.b分别从哪里来啊?
    你定义的类test没有定义a,b,所以编译期间就是错误的
    还有就是:如果你这个类都放在同一包下,那只有一个是public 的,并且这个文件的名字要和这个public类的名字一样·