以下代码段的输出为012
,但请告诉我(b2 instanceof Toy
)如何成真。
请对此进行解释。
interface Vessel { }
interface Toy { }
class Boat implements Vessel { }
class Speedboat extends Boat implements Toy { }
public class Tree {
public static void main(String[] args)
{
String s = "0";
Boat b = new Boat();
Boat b2 = new Speedboat();
Speedboat s2 = new Speedboat();
if((b instanceof Vessel) && (b2 instanceof Toy)) s += "1";
if((s2 instanceof Vessel) && (s2 instanceof Toy)) s += "2";
System.out.println(s);
}
}
答案 0 :(得分:1)
您可以将对象分配给其层次结构中任何类型的变量,但instanceof
将始终在评估时检查对象本身。 b2
引用Speedboat
对象,该对象实现Toy
,因此b2 instanceof Toy
为真。
答案 1 :(得分:0)
我相信this post会帮助您清楚地理解。
取自What is the 'instanceof' operator used for?
instanceof关键字是一个二进制运算符,用于测试对象是否存在 (instance)是给定Type的子类型。
正如帖子所解释的那样,由于Toy
是由SpeedBoat实现的,instanceof
运算符会为该条件返回true。
同样,official oracle documentation教程将instanceof
解释为:
instanceof运算符将对象与指定类型进行比较。您 可以使用它来测试对象是否是类的实例,实例 子类的实现,或实现特定的类的实例 接口
答案 2 :(得分:0)
instanceof
测试引用是否指向具体类型为,扩展或实现(直接或间接)给定类型的对象。
b2
引用的对象属于SpeedBoat
类型。 SpeedBoat
实施Toy
。因此b2
引用的对象是Toy
(即玩具的实例)。
instanceof
是&#34的同义词;是"在真实生活中。如果一个孩子向你展示一艘快艇,并问这是一个玩具",你会回答是的。如果他要求"它是快艇",你会回答是的。如果他要求"它是一个对象",你会回答是。如果他问'#34;它是香蕉",你会回答否。
答案 3 :(得分:0)
b2
是Speedboat
的实例,是实现Toy
的类。当Speedboat
扩展Boat
时,可以将其分配给类型层次结构中更高的类型(Boat b2 = new Speedboat();
),但因为它仍然是Speedboat
的实例(尝试b2.getClass()
),b2 instanceof Toy
仍然会返回true。
答案 4 :(得分:0)
例如,行
s2 instanceof Vessel
它试图找出s2是否在Vessel行的同一层次结构中。如果2比较类存在于同一层次结构中,则不一定是直接关系,而是在下一个或更远的关系旁边将得到回答。但是如果instanceof没有直接的层次结构,它将返回false。 像
interface A{..}
interface B{..}
class C implements A {..}
然后
C instanceof B
将返回false 和
C instanceof A
将返回true
答案 5 :(得分:0)
请注意,应谨慎使用instanceof。如果您发现自己正在编写使用instanceof的代码,那么请研究将目标代码转移到每个子类中的新成员方法(通常是它所属的位置)。在你的代码中,Boat和Speedboat都可以提供一个getScore()方法来消除对instanceOf的需求。
一个非常宝贵的地方是异常处理。例如:
try {
.. Access the database
} catch (Exception ex) {
if (ex instanceof SQLException) {
.. Process the details of the database exception to log more detail
} else {
throw ex;
}
答案 6 :(得分:-2)
(a instanceOf b)表示只有当a属于b的类型时,instanceOf运算符才返回true。 前 - 如果狗是一个超级类,小狗是一个子类。然后(狗实例小狗返回)是真的。
在你的例子中它的船只 - >船 - > speedBoat