理解java中的instanceof和if条件?

理解java中的instanceof和if条件?,java,instanceof,Java,Instanceof,我不确定树(引用变量)是如何成为中对象树的实例的 我的示例程序53,00?我期望“Pine”和“oops”作为输出,但为什么输出中包含“Tree”?我根本没有给出Tree=newtree() 由于松树或橡树也是一棵树,因此无论树是树、松树还是橡树,树的树实例都将返回true 您可以在中阅读有关继承的更多信息。子类是其自身的实例及其父类的子类型。每个类都是java.lang.Object类的子类型。 在您的示例中,Pine和Oak是树的子类,或者可以写成 松树和橡树是树类的亚型 if( tree

我不确定树(引用变量)是如何成为中对象树的实例的 我的示例程序53,00?我期望“Pine”和“oops”作为输出,但为什么输出中包含“Tree”?我根本没有给出Tree=newtree()


由于
松树
橡树
也是一棵
,因此无论
松树
还是
橡树
,树的
树实例都将返回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