请问成员变量的数据类型为什么可以是该类自身,如下,谢谢!

public class BinaryTree {

class TreeNode {

    private String data;

    private TreeNode leftNode;

    private TreeNode rightNode;

    public TreeNode(String data, TreeNode leftNode, TreeNode rightNode) {

        this.data = data;

        this.leftNode = leftNode;

        this.rightNode = rightNode;

    }

    public String getData() {

        return data;

    }

    public void setData(String data) {

        this.data = data;

    }

    public TreeNode getLeftNode() {

        return leftNode;

    }

    public void setLeftNode(TreeNode leftNode) {

        this.leftNode = leftNode;

    }

    public TreeNode getRightNode() {

        return rightNode;

    }

    public void setRightNode(TreeNode rightNode) {

        this.rightNode = rightNode;

    }

}
}

因为编译一个类型的时候不需要预先知道这个类型的信息。
从需求上来说,一个对象的部分也是这个对象,这是很正常的。

类似的,函数的实现中可以包含对自身函数的调用,这个叫递归。
比如
int sum(int x)
{
if (x == 1) return 1;
return sum(x - 1) + x;
}

对于面向对象的语言来说,一个类中能够使用的数据类型包括任何在本语言中合法的类型。
一个对象它属于引用类型数据实例,当然就可以出现在一个类中作为这个类的成员使用了,可能这个对象不是这个类的特有特征,但是它们存在一些必然或者实际行为动作中产生的间接联系,一个对象成为一个类的成员也就顺理成章,这样符合实际生活中的诸多现象。如 打印工作人员要打印文件,他一定就要使用打印机,打印机虽然不是打印工作人的本身特性,但是行为中要和其他对象进行交互,所以在程序设计中我们定义的打印工作人类就会包括一个打印机类型的属性了。。