同一类中的类名变量不理解概念

时间:2018-10-26 18:58:33

标签: java class

当我们创建类对象时,我无法理解其工作原理的以下概念

class MyClass {
    int data;
    MyClass var;  
}

我对它如何工作以及创建具有相同类名的对象的目的完全感到困惑。我不明白这个声明的概念。

3 个答案:

答案 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 CompositionInheritance 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;
   }
}

演示https://ideone.com/2qirCQ

这里是带有此代码的GitHub repository

答案 2 :(得分:0)

在您的情况下,每个MyClass实例都可以引用另一个MyClass实例。这个名字并没有暗示您为什么想要它。但总的来说,这种结构允许链接,装饰和嵌套。

例如,您可以实现一系列处理步骤。每个人都会呼叫链中的下一个,直到结束(var == null)。

或者,您的类可以“包装”该类的另一个实例,并在将它们委派给包装的实例之前执行类似log方法的调用。

可以使用类似的结构将树建模为Node,每个树都有一个子节点列表(List<Node> children)。叶节点将没有子节点。