当前位置: 首页 > 面试题库 >

如果父母的实例,instanceof是否返回true?

邵逸明
2023-03-14
问题内容

我有一个Child延伸的课程Parent

Parent child = new Child();

if (child instanceof Parent){
    // Do something
}

这返回true还是false,为什么?


问题答案:

是的,会的。为什么不呢?

因为child实际上是Parent的一个实例。如果您只想为孩子做手术,应该检查一下

if (child instanceof Child){
}

但是,您应该记住Scott Meyers撰写的来自Effective C ++的以下声明:

“每当您发现自己编写的代码形式为:“如果对象的类型为T1,则执行某些操作,但是如果对象的类型为T2,则执行其他操作。”

我认为在这种情况下也适用。如果你想 DoSomething的 依据是什么类型的类的引用对象所属的,下面的代码结构应该来帮您吧。

注意: 我尚未编译它。

class Parent {
    public void doSomething() {
        System.out.println("I am the Parent, and I do as I like");
    }
}

class ChildA extends Parent {
    public void doSomething() {
        System.out.println("I am a child named A, but I have my own ways, different from Parent");
    }
}

class ChildB extends Parent {
    public void doSomething() {
        System.out.println("I am a child named B, but I have my own ways, different from my Parent and my siblings");
    }
}

public class Polymorphism101 {

    public static void main(String[] args) {

        Parent p = new Parent();
        p.doSomething();

        p = new ChildA();
        p.doSomething();

        p = new ChildB();
        p.doSomething();

    }

}

编辑:一个更好的例子

您可能正在开发 绘图 应用程序。绘制任何形状的应用程序。在这种情况下,您应该有一个 抽象 类型Shape

出于以下目的:绘制所有形状;列出所有形状;查找形状或删除形状,您需要具有形状 列表 。由于列表是父类型,因此它可以存储任何形状。

Shape 接口/抽象类/虚拟类 应该有一个 抽象/纯虚
函数Draw()。因此,在DrawToDeviceLoop中,您只需调用Draw()每个形状,而无需检查它是什么形状。

Shape接口可以具有 抽象
实现AbstractShape,该实现可以具有形状名称或ID作为数据成员以及GetName,Cleanup和其他功能,这些功能具有所有形状共有的功能。

记住,抽象类型 不能 被实例化,所以Shape它本身也不能被实例化,因为它也不能被绘制。



 类似资料:
  • 问题内容: 如果我运行查询,例如: 即使查询与任何记录都不匹配,它也会始终返回结果吗?还是我需要验证并确保结果返回一行? 问题答案: 是的,因为它是一个聚合并且返回零。除非您添加GROUP BY,否则由于没有组,因此没有结果… 除非您添加GROUP BY,然后没有任何行,否则MAX / SUM等将返回NULL。只有COUNT传回没有结果的数字 编辑,有点晚:SUM会像MAX一样返回NULL 编辑,

  • 我必须使用一个c函数(),它在失败时返回标量、或。 这适用于以下故障: 但对于有效的论点,我得到: 如何检查呼叫是否成功?

  • 我知道当对象是特定类的实例时,instanceof返回TRUE。例如:

  • 问题内容: 如果path变量不在url中,是否可以使返回null?否则我需要做两个处理程序。一个为另一个,为,但即使没有定义游戏,我都做同样的事情,但是我从列表中选择第一个,但是如果定义了游戏参数,那么我就使用它。 这就是我尝试打开页面时得到的: 原因:java.lang.IllegalStateException:在@RequestMapping中找不到@PathVariable [exampl

  • 当我输入注册号时,当它以后一个B开头时,它应该返回值true,反之亦然,但在这个编码中,当我输入bhu132时,它将值变为false。这里怎么了..请帮帮我

  • 给定一个具有用于初始化的帮助器方法的类: 是否可以从\u int方法注释