我们如何在另一个类(类-2)中“使用”一个类(类-1),因为类-1只包含属性和相应的get函数和集合函数,而且Class-2具有所有操作函数(以前属于类-1)并使用Class-1属性?
最后的目标是创建一个独立的类--1--在一个单独的文件中--只有属性、setter和getter,还有一个类--2--在一个不同的文件中--它包含了Class-1的所有方法。假设Class 2导入类1,并且只在mainor调用函数中创建Class-2对象。
一种方法是在Class-2中声明类-1的对象,然后使用该对象的属性和get-set函数,但正如我在https://www.artima.com/objectsandjava/webuscript/ClassesObjects1.html中所读到的,该方法是“具有”类,而不是“使用”类。
那么如何实现“use”类呢?请参考https://www.artima.com/objectsandjava/webuscript/ClassesObjects1.html以获得更多的清晰度。
发布于 2016-06-10 22:13:11
我们如何在另一个类(类-2)中“使用”一个类(类-1),因为类-1只包含属性和相应的get函数和集合函数,而且Class-2具有所有操作函数(以前属于类-1)并使用Class-1属性?
如果类-2没有任何类-1,那么它可以在任何给定的点上使用一个类的唯一方法是,如果它创建一个类,或者它有一个提供给它。然而,它可以获得一个实例,它可以查询和操作该实例的状态,并且可以将该实例传递给其他对象。其他用途是不可能的,因为这是任何人对Class-1实例所能做的全部工作。
当您说“只在mainor调用函数中创建了Class-2对象”时,我将您解释为任何调用Class-2方法的人都不会提供任何Class-1实例。特别是,我假设您不是在直接创建Class-1实例的用户和间接获得类-2实例的用户之间画一条假想的线。这种区分是毫无意义的。如果Class-2代表它的用户创建了Class-1的实例并提供给它的用户,那么用户已经有效地创建了它们。如果用户可以以任何方式获得Class-1实例,那么在问题的抽象级别上,这些方法的细节是无关的。
这只留下了这样的可能性:类2“使用”它根据需要自行创建的第1类实例,它仅通过局部变量和/或方法参数引用(因为它“没有”任何类-1),并且不允许向其用户公开。这当然是可能的,但它的效用有限。如果设计有效,那么类-1可以完全删除,代之以类-2的局部变量和方法参数。然而,考虑到最初的单级设计确实存在状态,这样的设计似乎不太可能奏效。不过,这是有可能的。
还请注意,如果Class-2没有特定的类-1实例,那么它只能使用特定的类-1实例的唯一方法是,如果使用仅限于某个只能在类-2实例生存期内发生一次的事件,比如初始化。否则,这不是一种“使用”关系,而是一种使用关系。
由于最初的设计既有状态又有行为,状态部分似乎不太可能被简单地取消。在这种情况下,类-2用户不创建任何Class-1实例的约束似乎是错误的。您也许可以通过创建另一个类来维持与Class-1相同的状态,但这是荒谬的。既然已经有了一个非常好的类,为什么还要创建一个新类呢?如果您只是想避免Class-1被类-2以外的类直接实例化,那么允许Class-2向它的用户提供类-1的实例。因为用户随后可以获得实例,所以它可以将它们作为方法参数反馈给Class-2。这允许类-2使用类-1而不具有任何类-1本身.例如,
public class State {
private int x;
State(int x) { // package-private
this.x = x;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
public class Behavior {
// Uses State, but is not a State and does not have a State
public State doSomethingThatYieldsState(String s) {
try {
return new State(Integer.parseInt(s));
} catch (NumberFormatException nfe) {
return null;
}
}
public int doSomethingWithState(State s, int y) {
return y + s.getX();
}
public void doSomethingToState(State s) {
s.setX(s.getX() + 1);
}
}https://stackoverflow.com/questions/37756635
复制相似问题