【问题标题】:How to call a method of an already created object from another class method?如何从另一个类方法调用已创建对象的方法?
【发布时间】:2016-05-20 02:23:53
【问题描述】:

我正在尝试一个小程序,其中我有两个具有重载构造函数的类。 首先,我创建了一个第一个类的对象,将一个整数传递给它的构造函数。然后我创建第二个类的对象,传递给它的构造函数一个字符串。

Blabla 类包含一个 run() 方法,该方法应调用已在 main 方法中创建的 Bloblo 对象 t 的方法 afficher .但是,由于构造函数已重载,因此我在执行此操作时遇到了麻烦,我应该传递一些参数。并且 Blabla 对象 ts 不知道最初传递给 Bloblo 构造函数的值:2345

这里是一个例子,所以我说清楚了:

public class Trial {

  public static void main(String[] args) {

            Bloblo t = new Bloblo(2345);
            Blabla ts = new Blabla("Imad");
            ts.run();
          }
}

public class Bloblo {
        private int port;
        public Bloblo(int leport)
        {
            port = leport;
            System.out.println("au debut le port est: " + port);
        }
        public void afficher(String nom)
        {
            System.out.println("on va afficher dans BLOBLO: " + nom + "\net le port est: "+ port);

        }
}

public class Blabla implements Runnable{

        String Name = "";

        public Blabla(String nom)
        {
            Name = nom;
        }

        public void run()
        {
            System.out.println("voici le nom: " + Name);
            Bloblo obj = new Bloblo();
            obj.afficher(Name);
        }
}

这里的想法是我无法创建实例 obj,因为我必须将端口作为参数,而且我不知道它是什么端口。

【问题讨论】:

  • 尝试将 BloBlo 的引用传递给 BlaBla 构造函数并将其存储在一个字段中。
  • 对不起,我不太明白..我是 JAVA 的初学者,你能发布一个例子或更多细节吗?

标签: java constructor static static-methods


【解决方案1】:

您应该将对 BloBlo 的引用传递给 BlaBla 构造函数并将其存储在一个字段中。

public class Trial {

  public static void main(String[] args) {

            Bloblo t = new Bloblo(2345);
            Blabla ts = new Blabla("Imad", t);
            ts.run();
          }
}

public class Bloblo {
        private int port;
        public Bloblo(int leport)
        {
            port = leport;
            System.out.println("au debut le port est: " + port);
        }
        public void afficher(String nom)
        {
            System.out.println("on va afficher dans BLOBLO: " + nom + "\net le port est: "+ port);

        }
}

public class Blabla implements Runnable{

        String Name = "";
        Bloblo bloblo;
        public Blabla(String nom, Bloblo b)
        {
            Name = nom;
            bloblo = b;
        }

        public void run()
        {
            System.out.println("voici le nom: " + Name);

            bloblo.afficher(Name);
        }
 }

【讨论】:

    【解决方案2】:

    只需使用组合:即使 Bloblo 成为 Blabla 的属性。

    public class Blabla implements Runnable{
    
        String name = "";
        Bloblo obj;
    
        public Blabla(Bloblo obj, String name)
        {
            this.name = name;
            this.obj = obj
        }
    
        public void run()
        {
            System.out.println("Here is the name: " + name);
            obj.display(name);
        }
    }
    
    public class Trial {
    
        public static void main(String[] args) {
    
            Bloblo t = new Bloblo(2345);
            Blabla ts = new Blabla(t, "Imad");
            ts.run();
        }
    }
    

    【讨论】:

      【解决方案3】:

      您至少有两个选择,您可以将端口传递给 BlaBla,或者您可以提供实例化的 BloBlo

      public class Blabla implements Runnable{
      
          String Name = "";
          BloBlo myBloBLo;
      
          public Blabla(String nom, int leport)
          {
              Name = nom;
              myBloBlo = new Bloblo(leport);
          }
      
          public Blabla(String nom, Bloblo bloblo)
          {
              Name = nom;
              myBloBlo = bloblo;
          }
      
      
          public void run()
          {
              System.out.println("voici le nom: " + Name);
              myBloBLo.afficher(Name);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-10-18
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多