理解java中的instanceof和if条件?
我不确定树(引用变量)是如何成为中对象树的实例的 我的示例程序53,00?我期望“Pine”和“oops”作为输出,但为什么输出中包含“Tree”?我根本没有给出Tree=newtree()理解java中的instanceof和if条件?,java,instanceof,Java,Instanceof,我不确定树(引用变量)是如何成为中对象树的实例的 我的示例程序53,00?我期望“Pine”和“oops”作为输出,但为什么输出中包含“Tree”?我根本没有给出Tree=newtree() 由于松树或橡树也是一棵树,因此无论树是树、松树还是橡树,树的树实例都将返回true 您可以在中阅读有关继承的更多信息。子类是其自身的实例及其父类的子类型。每个类都是java.lang.Object类的子类型。 在您的示例中,Pine和Oak是树的子类,或者可以写成 松树和橡树是树类的亚型 if( tree
由于
松树
或橡树
也是一棵树
,因此无论树
是树
、松树
还是橡树
,树的树实例都将返回true
您可以在中阅读有关继承的更多信息。子类是其自身的实例及其父类的子类型。每个类都是java.lang.Object类的子类型。
在您的示例中,Pine和Oak是树的子类,或者可以写成
松树和橡树是树类的亚型
if( tree instanceof Tree )
是真的。每个子类都是其超类的一种类型。
因为您的“树”是从tree类扩展而来的Pine类的实例,所以它是tree的实例
对于您的编码风格,我建议阅读Keppil所说的instanceof在祖先上也返回true。基于此,将发生以下情况:
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。您的类Pine有一个隐式构造函数(除非您手动定义自己的构造函数,否则编译器会将其放置在那里,在这种情况下将使用您的构造函数)。所有子类都必须调用其父类(超类)作为其构造函数的一部分。不这样做会导致引发异常。所以你有一个隐含的
Pine Pine() { super(); }
调用其超类的隐式构造函数(Tree;“super()”就是这样做的),如下所示
Tree Tree() { super(); }
正在调用其超类(对象)的隐式构造函数
所以,如果树是一棵松树,那么
tree instanceof Pine
tree instanceof Tree
tree instanceof Object
all返回true我建议您开始将if
块封装在{…}
s中。我不确定if
block是否符合您的期望。
tree instanceof Pine
tree instanceof Tree
tree instanceof Object