java继承与instanceof测试结果

ykejflvf  于 2021-07-13  发布在  Java
关注(0)|答案(5)|浏览(287)

我正在学习'instanceof'java,但我不能清楚地理解'instanceof',我认为下面的答案是对的和错的,但结果都是对的。你能解释一下为什么会有这样的结果吗?如我所知,当a是b(父)的子对象,而b的一个示例是'false'时,结果与我所想的不同。

class Car{
    String color;
    int door;       
}

class FireEngine extends Car{
    void water(){
        System.out.println("water");
    }
}

public class Operator {
    public static void main(String[] args) {
        Car car = new FireEngine();
        FireEngine fireCar = new FireEngine();

        System.out.println(car instanceof FireEngine);
        System.out.println(fireCar instanceof Car);
    }
}
cnh2zyt3

cnh2zyt31#

声明!=价值

你宣布 car 作为一辆车,但它的价值是 FireEngine . instanceof 基于值工作,而不是基于变量的声明!!!
缩短可能有助于理解:

System.out.println(new FireEngine() instanceof FireEngine);  // true
System.out.println(new FireEngine() instanceof Car);         // true
xxe27gdn

xxe27gdn2#

输出 instanceof 取决于要测试其类型的变量的运行时类型。变量的编译时类型无关紧要(只要 x instanceof y将返回真值 x ,否则表达式将无法通过编译)。
两者 car 以及 fireCar 保留示例 FireEngine 在你的代码里。从那以后呢 FireEngine 是一种 Car ,两者 car 以及 fireCarinstanceof 两者 Car 以及 FireEngine ,所以你的密码会打印出来 true 以及 true .

cbwuti44

cbwuti443#

instanceof运算符的实现。如果对象参数(可以是表达式)是类类型的示例,则返回布尔值。
输入1:返回对象的对象或表达式。
输入2:返回类的类或表达式返回:一个布尔值,它是针对类测试对象的结果。
有关更多信息,请浏览javadocs@http://docs.oracle.com/cd/e13155_01/wlp/docs103/javadoc/com/bea/p13n/expression/operator/instanceof.html
有关更详细的示例说明,请浏览以下网页:http://mindprod.com/jgloss/instanceof.html

h6my8fg2

h6my8fg24#

在java中有两种类型的绑定:静态(引用类型)和动态(对象类型)。
就你而言:

Car car = new FireEngine();

汽车是静态的,消防车是动态的。这意味着,您实际上正在使用fireengine(对象类型)。你可以把汽车想象成一个特殊的指针,它的形状指向的是一个真实的物体,那就是你那令人敬畏的消防车。如果你读了instanceof你能理解它,这个方法告诉你一个对象是一个类的示例,而不是引用。所以编译器将看到:fireenge(car)instanceof fireenge?当然,让我们返回一个真实的!
你也可以看看这篇文章:'instanceof'操作符是用来做什么的?

tf7tbtn2

tf7tbtn25#

声明

As I know, when A is child of B (Parent), 
and a instanceof B is 'false' but result is different with what I thought.

不正确。 instanceof 不检查子对象,而是测试父对象。

相关问题