在java中的3个类中调用另一个类中的方法

时间:2015-01-02 22:18:31

标签: java class call static-methods

我在一个包中有3个班级。第一个类(ClassStart)生成其他2个类(ClassAClassB)的每个实例。我想通过ClassB通过其实例" a"来调用ClassA方法。{ 虽然Instance" a"的范围是包(因为"ClassA a;"中的属性ClassStart,行"a.showText()"无法正常工作。它会收到错误消息"a cannot resolved"。 所以我尝试了"s.a.showText()",但它没有用,因为实例" s"是以静态方法生成的,我不知道如何访问" s"。

第一个类(包含main方法):

public class ClassStart {
    ClassA a;

    public static void main(String[] args) {
    ClassStart s = new ClassStart();
    }

    public ClassStart() {
    a = new ClassA();
    ClassB b = new ClassB();
    }
}

第二节课:

public class ClassA {

    public void showText() {
    System.out.println("This text comes from ClassA.");
    }
}

第三课:

public class ClassB {

    public ClassB() {
    a.showText();
    }
}

如何在ClassB中调用方法" showText()" ClassA?
(我在这个论坛上找到了答案,但我没有找到像这样的三类问题的答案。)谢谢你的回答。

2 个答案:

答案 0 :(得分:2)

如果ClassA对象需要始终相同,则将其传递给B:

public class ClassB {
   private ClassA a;

   // pass the ClassA reference into the ClassB constructor
   public ClassB(ClassA a) {
     this.a = a;   // assign it to the a field
     // a.showText();  // or you can do this if you need it called in the constructor
   }

   // or do this if you want the a method called in a ClassB method.
   public void callAShowText() {
     a.showText();
   }
}

然后:

public class ClassStart {
    ClassA a;

    public static void main(String[] args) {
       ClassStart s = new ClassStart();
    }

    public ClassStart() {
       a = new ClassA();  // create your ClassA instance
       ClassB b = new ClassB(a);  // pass it into your ClassB instance
       b.callAShowText();
    }
}

这里理解的关键是理解引用类型和引用变量。您希望ClassB中的引用变量引用在ClassStart中创建的ClassA对象。一种方法是在对象的构造函数或setter方法中将对象传递给ClassB。一旦你完成了,那么ClassB就有了它需要的引用,它可以调用实例上的任何ClassA方法。

请注意,你也可以解决"这可以通过创建和使用公共静态ClassA变量或公共静态showText()方法来实现,但一般情况下你会尝试避免这样做,因为虽然在这样的简单例子中它可以正常工作,但它并没有"刻度"好吧,这意味着如果通常在更大的更复杂的程序中使用,则会增加复杂程序中潜在连接的风险,从而大大增加了错误的风险。正是出于这个原因,降低了复杂性并降低了创建面向对象编程的连通性(减少耦合)。

答案 1 :(得分:2)

使方法成为静态:

public static void showText()

然后叫它:

ClassA.showText();