解释Java中的多态性?

解释Java中的多态性?,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,根据声明 A m = new B(); 知道B类是a类的子类a是Object的子类, 解释计算语句时会发生什么 非常感谢 最简单的答案是,因为B是a的一个子类,所以这种评估可以正常进行 指向基类的指针可以很好地指向派生类,因为派生类是基类的实例 让我们进一步扩展示例: A m; B n = new B(); m = n; // Valid statement m=n是一个有效的语句,因为我们只能将一个对象分配给m。编译器看到B派生自A,因此它实际上是一个对象。如果它是一个不相关的类型,

根据声明

A m = new B();
知道B类是a类的子类a是Object的子类, 解释计算语句时会发生什么


非常感谢

最简单的答案是,因为B是a的一个子类,所以这种评估可以正常进行

指向基类的指针可以很好地指向派生类,因为派生类是基类的实例

让我们进一步扩展示例:

 A m;
 B n = new B();
 m = n; // Valid statement
m=n是一个有效的语句,因为我们只能将一个对象分配给m。编译器看到B派生自A,因此它实际上是一个对象。如果它是一个不相关的类型,编译器会对你大喊大叫。

  • 创建了一个名为
    m
    的变量,类型为
    A
  • 将构造
    B
    类型的对象
  • 变量
    m
    被指定一个对所创建对象的引用

您可以引用
m
,就好像它是
A类型的
而不带强制转换一样。这意味着您可以调用
A
中定义的任何方法;如果它们被重写,则调用
B
的方法版本。但是,除非使用强制转换,否则不能调用特定于
B
的任何方法。

RTTI
是一个词。运行时类型标识。

我推荐你使用Bruce Eckel的“Java思考”

编译器抱怨你没有在你的问题中添加
家庭作业
标记。这是家庭作业,还是你只是好奇发生了什么?实际上是一份过去的试卷,我不确定如何处理。这显然是一个初学者的问题,如果这是家庭作业、面试问题或诸如此类的问题,又有什么区别呢。。。也就是说,问题不是很清楚:“解释当语句被评估时会发生什么”——当被评估时会发生什么?汇编运行时间?什么是“评估”?@Mehrdad Ahaha,你让我开心!是的。我猜他想要Java理解并将类型B强制转换为AOk的机制,我知道子类类型的对象可以使用超类提供的类型创建,我只是在想是否还有其他内容(编译细节等)@EOS:不太可能。我对我的答案补充了一点,但在这句话中几乎没有什么内容。