我正在浏览网页,希望找到一些可以帮助我建立一个HuffmanTree的东西,我偶然发现了http://rosettacode.org/wiki/Huffman_coding#Java中的代码。
我是Java的新手并且无法使用它,因为它远远高于我的水平,但我仍然对它感兴趣(因为它是如此短而且看似有效的代码)而我试图通过它阅读希望至少要了解其中的大部分内容(注意:我失败了) 但有一段代码引起了我的注意:“instanceof”方法。
我的代码中有3个类 一个超类(HuffmanTree)和两个子类(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”,据我所知,它告诉你对象是否是某个类的实例(返回一个布尔值true或false)。
从逻辑上讲,父母不能是孩子的实例。
但是,当你编写(tree instanceof HuffmanNode)时,它返回true(树是HuffmanTree类的一个对象),如果我写(tree instanceof HuffmanLeaf),它返回false(逻辑上)。
但是当树是HuffmanNode的父类时,为什么(tree instanceof HuffmanNode)返回true?
答案 0 :(得分:3)
逻辑上,Tree
只是一个Node
,其中有两个Tree
个引用作为子项。
当tree是HuffmanNode的父级时,为什么(tree instanceof HuffmanNode)返回true?为什么呢?!
tree
必须是HuffmanNode
(如您所见),是的,任何HuffmanNode
都是其他两个HuffmanTree
实例的父级(它们本身可以是节点或树叶)。
但HuffmanNode
是 HuffmanTree
class HuffmanNode extends HuffmanTree { // <-----
public final HuffmanTree left, right; // subtrees
哪个解释......
当你写(树实例为HuffmanNode)
但是,不确定这个......
树是HuffmanTree类的对象
因为HuffmanTree
是 abstract
,这意味着必须按照以下方式声明它,因为您不能new
抽象实例
HuffmanTree tree = new HuffmanNode(...);
^^^^ This is the object's type
(就个人而言,我的叶子类是一个有两个null
子树的节点)