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

Java 是否可以对超类对象调用子类的方法?

宗政唯
2023-03-14
问题内容

动物是狗的超类,狗有一种叫bark的方法

public void bark()
{
    System.out.println("woof");
}

考虑以下:

Animal a = new Dog();
if (a instanceof Dog){
    a.bark();
}

会发生什么?

  1. the assignment isn’t allowed
  2. the call to bark is allowed and “woof” is printed at run time
  3. the call to bark is allowed but nothing is printed
  4. the call to bark causes a compile time error
  5. the call to bark results in a run time error

我说2是因为我们正在检查物体是否是狗;因为dog是其中包含bark方法的类,如果是,则将其调用,它将打印出:s

我的理解对吗?


问题答案:

因为Animal没有名为bark的方法。这样想吧,所有的狗都是动物,但不是所有的动物都是狗。所有的狗都会叫,但不是所有的动物都会叫。



 类似资料:
  • 让我们从一个非常简单的例子中推断出来:a类: 子类b继承A:

  • 好的,我的基本类层次结构如下: 这是形状和圆的代码。无需阅读,仅供参考;无论如何,主要是getter和setter。如果我的错误不明显,我建议最后看看它们。 还有circle课程。 我的问题与以下代码执行的结果有关: 注意:很抱歉代码太多;我只是不知道抽象类是否有什么奇怪的地方,或者是误解的真正根源。 我无法解释输出,其内容如下: 由此可以看出,第一个print命令引用的是toString的cir

  • 问题内容: 我正在玩Java的反射API,并尝试处理一些字段。现在,我要确定字段的类型。字符串很简单,只需执行即可。其他非派生类也是如此。但是,如何检查派生类?例如作为的子类。我无法找到任何或方法。我是否需要遍历所有人并自己找到超人? 问题答案: 您需要此方法: 一般情况下,(以上)应替换为并应替换为 从JavaDoc: 确定此对象表示的类或接口是否与指定参数表示的类或接口相同或超类或超接口。如果

  • 问题内容: 我有以下课程 这只是我实际架构的简化版本。最初,我不知道需要创建的人员类型,因此处理这些对象创建的函数将常规对象作为参数。 现在,我想使用此父类对象访问子类的方法。我还需要不时访问父类方法,所以 我不能 使其 抽象 。 我想我在上面的示例中简化太多了,所以这是实际的结构。 if语句显示“无法为QuestionOption找到getMultiple”。OuestionOption具有更多

  • 问题内容: 我有一个奇怪的Java问题: 据我们所知: 所有Java类都扩展 所有Java类都无法扩展 然后,必须扩展,它本身就是,因此,它应该是不可能的。如何用Java实现对象? 问题答案: 是第一个规则的例外,并且没有超类。从JLS3 8.1.4开始 : extend子句不能出现在Object类的定义中,因为它是原始类并且没有直接的超类。 您也可以通过反射尝试一下:

  • 问题内容: Java中的以下代码在elipse上运行时,即使我们将其替换,也会提供相同的输出 与, 请注意,我们已经覆盖了方法。 输出为: 码: 请指出,用这两种方式创建子类对象有什么区别。并且访问方法和变量是否有任何区别?(我们的Java老师说,两种情况下访问方法和变量都不同) 同样,静态方法(例如main)会发生什么。艰难的我知道它是可继承的,但是有人可以在子类中突出它的行为吗? 问题答案: