具有类中具有相同的类中的字段(having a field with the same class

2019-10-18 16:42发布

考虑下面的例子中

public class Human
{
public Human h1;
public String name;
public int age;

public Human()
{
  name = "myName";
      age = 22;
}
}

什么是具有在那里H1的意义呢? 怎样才可以用吗? 而为什么会使用吗? 我们不能只用我们将与新创建实例?

Answer 1:

什么是具有在那里H1的意义呢?

这将完全取决于类。

怎样才可以用吗?

像任何其他实例成员。

而为什么会使用吗? 我们不能只用我们将与新创建实例?

考虑一个链表,每个节点有链接到下一个(也可能是以前的)节点。 这些链接将是同一类节点本身。 例如,大致有:

class LinkedListNode {
    private LinkedListNode previous;
    private LinkedListNode next;
    private Object value;

    LinkedListNode(LinkedListNode p, LinkedListNode n, Object v) {
        this.previous = p;
        this.next = n;
        this.value = v;
    }

    LinkedListNode getPrevious() {
        return this.previous;
    }

    // ...and so on...
}

有许多其他类似的用例。 一个Person类可能对相关人员(配偶,子女)成员。 树类可能会有树叶,这可能将有链接到其他叶子。 等等。


在评论,你问一个单独的类。 是的,这是绝对,你不得不说是班上的类型成员的情况。 这里有一个标准单(有关于这一主题的许多变化):

class Foo {
    // The singleton instance
    static Foo theInstance = null;

    // Private constructor
    private Foo() {
    }

    // Public accessor for the one instance
    public static synchronized Foo getInstance() {
        if (theInstance == null) {
            theInstance = new Foo();
        }
        return theInstance;
    }

    // ...stuff for Foo to do, usually instance methods...
}


Answer 2:

其中一个例子,如果你有一个像结构树,然后节点可以包含它自己类型的孩子。 这是你的原因Human类有它自己的类型的属性。



Answer 3:

  • 如果一个手动建立链表,树或对象关联的一些其他形式,这样的字段可以命名为prevnextparentchildfirstChildlastChildprevSiblingnextSibling ,...。
  • 与同类型的(递归)或不同类型的父/子关联建模与JPA的实体,例如,它(通常)不会仅仅指向同一个实例(本)。
  • 相同类型的静态字段可以用于单实例或某种预定义的,可能最终值的。


Answer 4:

这是很常见的具有相同类型之类的领域,以实现诸如链表,树等,在Java数据结构。

它基本上是一样什么指针被用于此目的的C.

作为在java的创建的每个对象实际上是“参考”,以在堆对象的实际位置,因此,在某种程度上可以查看他们作为指针将是C.

所以是这样的:
struct List{ int val; List *next; }


将在Java中是这样:
class MyList{ int val; MyList nextNode; }



文章来源: having a field with the same class inside a class
标签: java class field