当我们创建类对象时,我无法理解其工作原理的以下概念
class MyClass {
int data;
MyClass var;
}
我对它如何工作以及创建具有相同类名的对象的目的完全感到困惑。我不明白这个声明的概念。
答案 0 :(得分:2)
当您要对一些真实场景进行建模时,可能必须使用此概念。
例如,考虑一棵树的分支。一棵树的分支上可能有n个分支。分支将引用其旁边的分支。
class Branch {
Branch branch1;
Branch branch2;
Branch branch3;
}
答案 1 :(得分:1)
这是一个完全有效的Java类声明。 MyClass var;
在您的代码中的含义示例如下:
想象一下,该类称为Directory
(它代表现实生活中硬盘驱动器中的目录位置),并且我们要模拟一个目录可以具有更多(子)目录(为简单起见,只有一个:) )。因此我们可以使用以下结构对此进行仿真:
class Directory {
int amountOfFolders;
Directory subdiretory; // <-- child object(directory)!
// Directory[] subdiretories; // out of curiosity, this would be much more real
}
这样,当我们创建一个Directory
对象并设置其子目录并对其进行一些处理时。
这称为组成(有关更多信息,请访问Difference between Inheritance and Composition和Inheritance and Composition(“组成的基础知识”部分))
有关更多详细信息,请参见下面的代码注释...
class MyClass {
int data;
// attribute of type MyClass, this can represent a hierarchical structure
// in real life applications.
MyClass var;
// this is not a class method, but its constructor, used to create instances
// of this class, i.e.: MyClass c = new MyClass();
public MyClass() {
}
// this is another constructor, which receives a parameter for setting its
// attribute data, i.e.: MyClass c = new MyClass(3);
public MyClass(int data) {
this.data = data;
}
}
这里是带有此代码的GitHub repository。
答案 2 :(得分:0)
在您的情况下,每个MyClass
实例都可以引用另一个MyClass
实例。这个名字并没有暗示您为什么想要它。但总的来说,这种结构允许链接,装饰和嵌套。
例如,您可以实现一系列处理步骤。每个人都会呼叫链中的下一个,直到结束(var == null
)。
或者,您的类可以“包装”该类的另一个实例,并在将它们委派给包装的实例之前执行类似log方法的调用。
可以使用类似的结构将树建模为Node
,每个树都有一个子节点列表(List<Node> children
)。叶节点将没有子节点。