【问题标题】:Functionality of an extension of a class in javajava中类扩展的功能
【发布时间】:2017-02-15 13:18:12
【问题描述】:

假设存在以下类:

public class A {

  public void whatAreYou() {
    System.out.println("A");
  }
}

___________________________

public class B extends A {

  public void whatAreYou() {
    System.out.println("B");
  }
}

现在,我们用以下方式初始化 a 和 b:

A b = new B();
b.whatAreYou();

_______________

B a = new A();
a.whatAreYou();

问题是:这些程序能正常运行吗?如果没有,他们有什么不能犯的错误?

我的看法:

我认为第一个程序应该可以正常工作,因为 B 类是 A 类的扩展。但我不知道我们这里有什么样的对象。它是否也具备 B 的所有属性?除此之外,它应该打印“B”。

第二个程序不起作用,但我缺乏明确的解释。

有人可以帮帮我吗?

【问题讨论】:

  • 当你尝试编译它时会发生什么?第二个程序“不工作”——编译器给你什么错误信息?批判性地阅读它们。
  • A 不是 B。每只狗都是动物,但并非每只动物都是狗。你不能让小猫叫
  • @HovercraftFullOfEels:它只是告诉我 A 不能转换为 B。

标签: java oop


【解决方案1】:

将代码放入 IDE 肯定会有所帮助,因为您可以使用调试器逐步查看正在发生的事情。您还可以看到 'B a = new A();' 的编译时错误然后从那里去。关于类的功能,在这种情况下,B 覆盖了“whatAreYou()”方法。这可以通过 @Override 注释来说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多