解释Java中的多态性?

时间:2011-04-09 19:40:25

标签: java inheritance polymorphism

鉴于声明

A m = new B();

并且知道B类是A类的子类,而A是Object的子类, 解释在评估陈述时会发生什么。

非常感谢提前!

3 个答案:

答案 0 :(得分:1)

最简单的答案是,由于B是A的子类,因此评估可以正常进行。

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

让我们再展开一下这个例子:

 A m;
 B n = new B();
 m = n; // Valid statement

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

答案 1 :(得分:0)

  • 创建了一个名为m的变量,其类型为A
  • 构建B类型的对象
  • 为变量m分配了对创建对象的引用

您可以在没有演员表的情况下引用m,就好像它是A类型一样。这意味着您可以调用A中定义的任何方法;如果它们被覆盖,则调用B的方法版本。但是,除非使用强制转换,否则不能调用任何特定于B的方法。

答案 2 :(得分:0)

RTTI就是这个词。运行时类型标识。
我推荐Bruce Eckel的“Thinking in Java”