繁体   English   中英

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

[英]Call a method in another class within 3 classes in java

我在一个包中有3个班级。 第一个类( ClassStart )分别生成其他两个类( ClassAClassB )的实例。 我想通过实例“ a”在ClassB调用ClassA的方法。
尽管实例“ a”的作用域是包(由于ClassStart中的属性"ClassA a;" ,行"a.showText()"不起作用。它得到了错误消息"a cannot resolved" 。所以我尝试过"sashowText()"但是它不起作用,因为实例“ s”是在静态方法中生成的,并且我不知道如何访问“ s”。

第一类(包含主方法):

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中调用ClassA的方法“ showText()”?
(我在这个论坛中一直在寻找答案,但是对于这样的三类问题,我没有找到答案。)谢谢您的回答。

如果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()方法来“解决”此问题,但是通常,您会避免这样做,因为尽管在这样的简单示例中它可以正常工作,它不能很好地“缩放”,这意味着,如果通常将其用于较大的更复杂的程序中,将有增加复杂程序中潜在连接的风险,从而大大增加了发生错误的风险。 出于这个原因,为了降低复杂性并减少连接性(减少耦合),创建了面向对象的编程。

将方法设为静态:

public static void showText()

然后调用它:

ClassA.showText();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM