我在有main() 的Coffee class类文件里定义了如下实例:appOrder
public class Coffee{
    public static void main(String[] args) {
           Order appOrder = new Order();
}然后呢,我想在别的class类文件(rootMenu)里访问这个实例的方法,
public class rootMenu {
    public void Mainmenu(){
           .......
           appOrder.startOrder(); //startOrder() is a method of appOrder
           .......
    }
}
除了用继承之外,还有别的方法吗?  
有这个问题的原因是,我之前写的小程序基本上都是两个文件,一个实现一个函数,甚至都是在一个文件里,这样根本不会有上述问题. 
但当要求变成符合OO原则, 数据封装等要求后, 问题就出来了.抽象一点说就是: 在class A里创建了一个constractor构造器 B的引用C, 然后呢,我想在class D里调用这个C,使用C的方法.对C的数据进行操作. 我不知道该怎么做了... class A和Class D分属两个不同的文件.实际上constractor构造器 也是单独的一个文件(Class B)大多数书籍上的Java例子都是为了说明具体问题而写,不会有多个文件相互访问数据之类的问题...恳请赐教

解决方案 »

  1.   

    public class Coffee{
        Order appOrder = new Order();
        public static void main(String[] args) {
               rootMenu rm = new rootMenu(appOrder);
    }public class rootMenu {
        Order appOrder;
        public void Mainmenu(Order appOrder){
               this.appOrder = appOrder;
               appOrder.startOrder(); //startOrder() is a method of appOrder
               .......
        }
    }不太明白LZ的需求,不知道这是不是LZ想要的
      

  2.   

    在rootMenu里声明Order appOrder时,就是访问的Coffee class里的那个
    appOrder?public class rootMenu {
        Order appOrder;
    上面的Order appOrder; 实际上指的还是下面这个class里的appOrder吗? 我指下面的appOrder和上面的appOrder是不是实际上是一个对象?
    public class Coffee{
        Order appOrder = new Order();
      

  3.   

    我想我明白楼主的意思了.是不是说,类A中实例了一个B,然后在类C中调用B中的方法..package test;public class A {
    B c ;
    public A() {
    c = new B();
    new C(c); //通过构造方法传值到Class C.
    }
    }
    package test;public class B {
    public static void show() {
    System.out.println("class B show API.");
    }
    }
    package test;public class C {
    static B b;
    public C(B c) {
    this.b = c; //通过A中构造方法传值得到B的实例!
    }

    public static void main(String[] args) {
    b.show(); //可以调用B的show();
    }
    }这样代码可以通过在构造方法中传值,把对象传到C,可以不通过继承!!!这个只是其中一种..楼下再补充吧!
      

  4.   

    package   test; public   class   A   { 
    B   c   ; 
    public   A()   { 
    c   =   new   B(); 
    new   C(c);   //通过构造方法传值到Class   C. 

      

  5.   


    package   test; public   class   B   { 
    public   static   void   show()   { 
    System.out.println( "class   B   show   API. "); 

    }
    package   test; public   class   C   { 
    static   B   b; 
    public   C(B   c)   { 
    this.b   =   c;   //通过A中构造方法传值得到B的实例! 
    } public   static   void   main(String[]   args)   { 
    b.show();   //可以调用B的show(); 


      

  6.   

    package   test;public   class   A   {
    B   c   ;
    public   A()   {
    c   =   new   B();
    new   C(c);   //通过构造方法传值到Class   C.
    }
    }
    package   test;public   class   B   {
    public   static   void   show()   {
    System.out.println( "class   B   show   API. ");
    }
    }package   test;public   class   C   {
    static   B   b;
    public   C(B   c)   {
    this.b   =   c;   //通过A中构造方法传值得到B的实例!
    }public   static   void   main(String[]   args)   {
    b.show();   //可以调用B的show();
    }
    }谢谢楼上的,我整理了一下您的回帖.
      

  7.   

    上下的appOrder都是Order类的实例化对象
      

  8.   

    我主贴说的不太清楚,我重写个小例子. 以下每个class 都是一个单独的文件:
    为什么我不能在hello class 里用c.display()?  如果想这么做,该怎么办? 不用继承和静态方法.
    test class里的display方法调用的是hello主方法里构建的a,b对象.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());
    }
    }
      

  9.   

    我知道问题了. 谢谢楼上诸位. 挨个加过辛苦分了. 如没加上,请回帖告知.  firefox 上CSDN不太方便.