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(它们本身可以是节点或叶子)。
但是HuffmanNode
是HuffmanTree
class HuffmanNode extends HuffmanTree { // <-----
public final HuffmanTree left, right; // subtrees
这解释了...
when you write (tree instanceof HuffmanNode)
但是,我不确定...
tree is a object of the class HuffmanTree
因为 HuffmanTree
是 abstract
,这意味着它必须按以下方式声明,因为你不能 new
一个抽象实例
HuffmanTree tree = new HuffmanNode(...);
^^^^ This is the object's type
(就个人而言,我希望叶子 class 是一个有两个 null
子树的节点)
我正在浏览网页,希望找到可以帮助我构建 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(它们本身可以是节点或叶子)。
但是HuffmanNode
是HuffmanTree
class HuffmanNode extends HuffmanTree { // <-----
public final HuffmanTree left, right; // subtrees
这解释了...
when you write (tree instanceof HuffmanNode)
但是,我不确定...
tree is a object of the class HuffmanTree
因为 HuffmanTree
是 abstract
,这意味着它必须按以下方式声明,因为你不能 new
一个抽象实例
HuffmanTree tree = new HuffmanNode(...);
^^^^ This is the object's type
(就个人而言,我希望叶子 class 是一个有两个 null
子树的节点)