我是java的新手,并且对类之间的通信有疑问。说我在下面有这个例子。
结果是“打印1和2”
这很好但是有更好的方法在类之间进行通信。对我来说,通过主类似乎还有很长的路要走。是否可以直接在MyClass1和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());
}
}
MyClass1的:
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;
}
}
MyClass2:
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;
}
}
答案 0 :(得分:6)
良好的OO设计的重点是:某个对象A应该可以访问其他对象,它需要完成它的工作。
含义;通常你的课程看起来像:
public class Foo {
private final Bar bar;
...
含义:任何 Foo 对象都有一个 bar 字段,其中包含 Bar 对象;并且这个 Foo 对象可以用来做 Foo 必须做的事情。
所以,如果你想MyClass1应该用MyClass2做一些事情,那么一个类应该有一个这种类型的字段;例如,使用构造函数初始化该字段。
但是,另一方面:良好的OO设计的另一个想法是一个班级有特定的责任。而且你想让你的课程变得小而且#34;尽可能;含义:您仔细考虑要在课程中使用哪些字段。换句话说:你试图创建一些小而有用的构建块"。然后,在更高的层次上,你使用小的构建块撰写某些东西"更大的"。从这个意义上讲,您当前的实现(其中 main 创建了多个对象;并分别调用它们来实现某些目标实际上是良好方法)。你看,你想要最后得到的东西:一些大班,负责"一切"!
最后:我知道我的回答是#34;非常通用和抽象的&#34 ;;但你的示例代码也是如此。含义:为了学习如何创建真正的设计;最好是处理真正的问题。你看,你发布的代码没有做某事"有用&#34 ;;因此,它的结构并不重要(很多)。在某种程度上,总是更容易给出具体的建议,即更具体的输入/任务。
答案 1 :(得分:0)
在Java中,getter / Setter模型通常用在Java Bean中,其中这些模型充当实际bean属性的包装器。 Setter通常验证数据并存储值,而getter通常会返回属性值。
即使在一般编程中,最好提供一个setter而不是直接字段访问,这样如果将来出现某些内容并且需要对该字段进行一些更改,那么可以在setter getter中轻松完成,而不会影响代码正在使用这些API。
对于您的示例,可以使用单个API代替getter和setter。如果该值不应存储在实例级别,则可以将此API设为static
。
示例:强>
class MyClass1{
static String modifyString(String str){
if(str == null){
return null;
}else{
return (str + " 1");
}
}
}