【问题标题】:using interface to communicate between 2 java classes使用接口在 2 个 java 类之间进行通信
【发布时间】:2011-12-15 07:03:59
【问题描述】:
我有 2 个 A 和 B 类。
class A implements Constants{
private int state;
}
class B implements Constants{
foo(){
//want to set state variable of class A like this
state = state1
}
}
interface Constants{
public final int state1;
public final int state2;
}
我不想在 B 类中有 A 类的实例。我应该怎么做?
如果我有一个在接口中设置变量的函数,那么两个类都必须实现这个函数。那会是错的吧?因为同一个函数的两个定义会冲突?
【问题讨论】:
标签:
java
interface
scope
class-method
class-members
【解决方案1】:
java 中没有所谓的函数。它们是方法。
您可以在类中使用 getter 和 setter 来设置属性并从外部类中获取它们。
您的问题不清楚。
如果你的B类扩展了A类,那么通过B类的构造函数,你可以设置A类的属性,也就是超类。
希望对你有帮助!
【解决方案2】:
拥有接口并不意味着变量将在类之间共享,它更多的是定义类的一种方式,这些类必须覆盖接口中的函数。你可以阅读他们的基础知识here。要在两个类之间共享一个变量,您可以将变量设为静态并将其放在两个类都扩展的另一个类中(实际上是一个全局变量,这是不好的做法并且不是线程安全的),或者让其中一个类具有另一个实例并调用 getters/setters。
编辑:有一个类似的问题here 向您展示了我对静态变量的意思。
【解决方案3】:
您通常希望避免在一个类中编写任何试图改变另一个类的内部状态的方法。无论你想出什么技巧来完成这样的事情,你都在破坏封装的原则,这就是首先使用类的全部原因。
如果您希望从多个类中访问某个状态,我建议将该状态分解为它自己的类,并让这两个类中的每一个都通过 getter/setter 或实用程序方法与之交互。