Java - Tree 是 Node 的实例吗?

Java - Is Tree an instance of Node?

我正在浏览网页,希望找到可以帮助我构建 HuffmanTree 的东西,但我偶然发现了来自 http://rosettacode.org/wiki/Huffman_coding#Java.

的这段代码

我是 Java 的新手,无法使用它,因为它远远超出了我的水平,但我仍然对它很感兴趣(因为它是如此简短且看似有效的代码)并且我试图通读它,希望至少能理解其中的大部分内容(注意:我失败了​​)。
但是有一段代码引起了我的注意:"instanceof" 方法。

我的代码中有 3 个 class。
一个 superclass (HuffmanTree) 和两个 subclasses (HuffmanNode 和 HuffmanLeaf) 看起来像这样:

abstract class HuffmanTree implements Comparable<HuffmanTree> {
    public final int frequency; // the frequency of this tree
    public HuffmanTree(int freq) { frequency = freq; }

    // compares on the frequency
    public int compareTo(HuffmanTree tree) {
        return frequency - tree.frequency;
    }
}

class HuffmanLeaf extends HuffmanTree {
    public final char value; // the character this leaf represents

    public HuffmanLeaf(int freq, char val) {
        super(freq);
        value = val;
    }
}

class HuffmanNode extends HuffmanTree {
    public final HuffmanTree left, right; // subtrees

    public HuffmanNode(HuffmanTree l, HuffmanTree r) {
        super(l.frequency + r.frequency);
        left = l;
        right = r;
    }
}

我读了一些关于 "instanceof" 的内容,据我了解,它告诉你 object 是否是某个 class 的实例(returning 一个布尔值 true 或 false)。
从逻辑上讲,parent 不能是 child.

的实例

然而,当你写 (tree instanceof HuffmanNode) 时,它 return 是真的(树是 class HuffmanTree 的 object)并且如果我写 (tree instanceof HuffmanLeaf ) 它 return 是错误的(逻辑上)。
但是,当树是 HuffmanNode 的 parent 时,为什么 (tree instanceof HuffmanNode) return 为真?

从逻辑上讲,Tree 只是一个 Node 和两个 Tree 引用 children。

why does (tree instanceof HuffmanNode) return true when tree is a parent of HuffmanNode? Why?!

tree 必须是 HuffmanNode(如您所见),是的,任何 HuffmanNode 都是另外两个 HuffmanTree 实例的 parent(它们本身可以是节点或叶子)。

但是HuffmanNodeHuffmanTree

class HuffmanNode extends HuffmanTree { // <-----
    public final HuffmanTree left, right; // subtrees

这解释了...

when you write (tree instanceof HuffmanNode)

但是,我不确定...

tree is a object of the class HuffmanTree

因为 HuffmanTreeabstract,这意味着它必须按以下方式声明,因为你不能 new 一个抽象实例

HuffmanTree tree = new HuffmanNode(...); 
                    ^^^^ This is the object's type

(就个人而言,我希望叶子 class 是一个有两个 null 子树的节点)