java中类之间的通信

java中类之间的通信,java,class,Java,Class,我是java新手,有一个关于类间通信的问题。假设我得到了下面这个例子 我得到了一个字符串(print),我将它发送给MyClass1中的setter方法 在MyClass1中,我更改了getterMethod和ad“1”中的字符串 我在main类中接收被操纵的字符串,并将其发送给MyClass2中的setter方法 在MyClass2中,我再次更改字符串并添加“and 2”,因此完整字符串为“print 1 and 2” 然后,我通过MyClass2中的gettermethod在main类中接收

我是java新手,有一个关于类间通信的问题。假设我得到了下面这个例子

  • 我得到了一个字符串(print),我将它发送给MyClass1中的setter方法
  • 在MyClass1中,我更改了getterMethod和ad“1”中的字符串
  • 我在main类中接收被操纵的字符串,并将其发送给MyClass2中的setter方法
  • 在MyClass2中,我再次更改字符串并添加“and 2”,因此完整字符串为“print 1 and 2”
  • 然后,我通过MyClass2中的gettermethod在main类中接收新字符串,并在main方法中打印结果
  • 结果是“打印1和2”

    这很好,但是在类之间有更好的通信方式吗。对我来说,这似乎是一个漫长的道路,通过主要类。是否可以在MyClass1和MyClass2之间直接通信,而不必先通过mainclass

    所以我的问题是:我有更好的方法吗

    这是我的工作代码:

    主类:

    public class Testing1 {
    
        public static void main(String[] args) {
            String print = "Hello world";
    
            MyClass1 m1 = new MyClass1();
            MyClass2 m2 = new MyClass2();
    
            m1.setPrint(print);
    
            m2.setPrint(m1.getPrint());
    
            System.out.println("m2 = " + m2.getClass2());
        }
    }
    
    public class MyClass1 {
    
        private String print = "";
    
        public MyClass1() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getPrint() {
            String print2 = print+" " + 1;
            return print2;
        }
    }
    
    public class MyClass2 {
    
        private String print = "";
    
        public MyClass2() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getClass2() {
            String print2 = this.print + " and 2";
            return print2;
        }
    }
    
    class MyClass1{
      static String modifyString(String str){
        if(str == null){
          return null;
        }else{
          return (str + " 1");
        }
      }
    }
    
    MyClass1:

    public class Testing1 {
    
        public static void main(String[] args) {
            String print = "Hello world";
    
            MyClass1 m1 = new MyClass1();
            MyClass2 m2 = new MyClass2();
    
            m1.setPrint(print);
    
            m2.setPrint(m1.getPrint());
    
            System.out.println("m2 = " + m2.getClass2());
        }
    }
    
    public class MyClass1 {
    
        private String print = "";
    
        public MyClass1() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getPrint() {
            String print2 = print+" " + 1;
            return print2;
        }
    }
    
    public class MyClass2 {
    
        private String print = "";
    
        public MyClass2() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getClass2() {
            String print2 = this.print + " and 2";
            return print2;
        }
    }
    
    class MyClass1{
      static String modifyString(String str){
        if(str == null){
          return null;
        }else{
          return (str + " 1");
        }
      }
    }
    
    MyClass2:

    public class Testing1 {
    
        public static void main(String[] args) {
            String print = "Hello world";
    
            MyClass1 m1 = new MyClass1();
            MyClass2 m2 = new MyClass2();
    
            m1.setPrint(print);
    
            m2.setPrint(m1.getPrint());
    
            System.out.println("m2 = " + m2.getClass2());
        }
    }
    
    public class MyClass1 {
    
        private String print = "";
    
        public MyClass1() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getPrint() {
            String print2 = print+" " + 1;
            return print2;
        }
    }
    
    public class MyClass2 {
    
        private String print = "";
    
        public MyClass2() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getClass2() {
            String print2 = this.print + " and 2";
            return print2;
        }
    }
    
    class MyClass1{
      static String modifyString(String str){
        if(str == null){
          return null;
        }else{
          return (str + " 1");
        }
      }
    }
    

    好的OO设计的全部要点是:某个对象A应该能够访问它需要执行其工作的其他对象

    意义;通常情况下,您的类看起来像:

    public class Foo {
      private final Bar bar;
    ...
    
    意思是:任何Foo对象都有一个字段栏,其中包含一个bar对象;这个Foo对象可以用来做Foo必须做的事情

    因此,如果您想让MyClass1处理MyClass2,那么一个类应该有一个该类型的字段;例如,该字段是使用构造函数初始化的

    但是,另一方面:好的OO设计的另一个想法是类具有特定的责任。你想让你的课程尽可能的“小”;意思:你仔细考虑你想在你的类中拥有哪些字段。换言之:您尝试创建小而有用的“构建块”。然后,在更高的层次上,您使用小的构建块来组合一些“更大”的东西。从这个意义上说,您当前的实现(main创建了几个对象;并分别调用它们以实现某个目标)实际上是一种良好的方法。你看,你最不想得到的是:几个大类,负责“一切”


    最后:我知道我的答案是“相当一般和抽象”;但您的示例代码也是如此。意思:为了学习如何创造真正的设计;最好的办法是解决实际问题。你看,你发布的代码没有做一些“有用”的事情;因此,它的结构并不重要。在某种程度上,当手头有更具体的输入/任务时,总是更容易给出具体的建议。

    在Java中,getter/Setter模型通常用于Java bean中,它们充当实际bean属性的包装器。Setter通常验证数据并存储值,而getter通常按原样返回属性值

    即使在一般编程中,最好提供setter而不是直接字段访问,这样,如果将来出现了某些问题,并且需要对该字段进行一些更改,那么就可以在setter-getter中轻松完成,而不会影响使用这些API的代码

    对于您的示例,可以像这样使用单个API,而不是getter和setter。如果该值不应存储在实例级别,则可以将此API设置为静态

    示例:

    public class Testing1 {
    
        public static void main(String[] args) {
            String print = "Hello world";
    
            MyClass1 m1 = new MyClass1();
            MyClass2 m2 = new MyClass2();
    
            m1.setPrint(print);
    
            m2.setPrint(m1.getPrint());
    
            System.out.println("m2 = " + m2.getClass2());
        }
    }
    
    public class MyClass1 {
    
        private String print = "";
    
        public MyClass1() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getPrint() {
            String print2 = print+" " + 1;
            return print2;
        }
    }
    
    public class MyClass2 {
    
        private String print = "";
    
        public MyClass2() {
    
        }
    
        public void setPrint(String print) {
            this.print = print;
        }
    
        public String getClass2() {
            String print2 = this.print + " and 2";
            return print2;
        }
    }
    
    class MyClass1{
      static String modifyString(String str){
        if(str == null){
          return null;
        }else{
          return (str + " 1");
        }
      }
    }
    

    取决于MyClass1和MyClass2是什么:)在java中,类类似于事物的模板,对象是该模板的实例。例如,如果MyClass1是Home,MyClass2是Dog,那么可以将Dog作为私有变量放在类Home中,等等。只要开始考虑像真实对象这样的类:)