我不确定树(引用变量)如何成为对象Tree的实例 我的示例程序53,00?我期待“Pine”和“oops”作为输出,但为什么“Tree”包含在输出中?我还没有给Tree tree = new Tree()。
class Tree{}
class Pine extends Tree{}
class Oak extends Tree{}
public class forrest {
public static void main( String[] args )
{
Tree tree = new Pine();
if( tree instanceof Pine )
System.out.println( "Pine" );
if( tree instanceof Tree )
System.out.println( "Tree" );
if( tree instanceof Oak )
System.out.println( "Oak" );
else System.out.println( "Oops" );
}
}
答案 0 :(得分:6)
由于Pine
或Oak
也是IS-A Tree
,因此tree instanceof Tree
tree
Tree
,Pine
将返回true {1}}或Oak
您可以在Java Tutorials上的Inheritance
了解更多信息。
答案 1 :(得分:3)
正如Keppil所说,instanceof对祖先也是如此。基于此,将发生以下情况:
Tree tree = new Pine()
tree instanceof Pine; // true
tree instanceof Oak; // false
tree instanceof Tree; // true
tree instanceof Object; // true
Object something = new Oak();
something instanceof Pine; // false
something instanceof Oak; // true
something instanceof Tree; // true
something instanceof Object; // true
实际上,instanceof Object将始终返回true。
答案 2 :(得分:1)
你的类Pine有一个隐式构造函数(由编译器放在那里,除非你手动定义自己的构造函数,在这种情况下你的构造函数将被使用)。所有子类都必须将其父类(超类)作为其构造函数的一部分进行调用。不这样做会导致抛出异常。所以你有一个隐含的
Pine Pine() { super(); }
这是调用它的超类的隐式构造函数(Tree;这就是“super()”所做的),看起来像
Tree Tree() { super(); }
调用它的超类(Object)的隐式构造函数......
因此,如果树是松树,那么
tree instanceof Pine
tree instanceof Tree
tree instanceof Object
全部返回true
答案 3 :(得分:0)
子节点本身的实例和父类的子类型。每个类都是java.lang.Object类的子类型。 在你的例子中,Pine和Oak是Tree的子类或者可以写成 Pine和Oak是Tree类的子类型,所以
if( tree instanceof Tree )
是真的。
答案 4 :(得分:0)
每个子类'都是其超类的'类型。 由于您的“树”是从Tree类扩展的Pine类的实例,因此它是Tree的实例。
对于您的编码风格,我建议您阅读Beware of instanceof operator