【发布时间】:2016-01-25 17:55:29
【问题描述】:
class Monster {
boolean frighten(int x) {
System.out.println("Monster");
return true;
}
}
class Vampire extends Monster {
boolean frighten(byte x) {
System.out.println("Vampire");
return true;
}
}
class Dragon extends Monster {
boolean frighten(int x) {
System.out.println("Dragon");
return true;
}
}
class Sample {
public static void main(String s[]) {
Monster[] inst = new Monster[3];
inst[0] = new Monster();
inst[1] = new Vampire();
inst[2] = new Dragon();
for (int i = 0; i < 3; i++) {
inst[i].frighten(i);
}
}
}
当我在Monster 或Dragon 类中使用x 作为int 运行上述代码时,代码可以按我预期的方式正常运行。但是,当我通过在 Monster 或 Dragon 类中将 x 的类型从 int 更改为 long 来运行代码时,它会打印以下内容:
Monster
Monster
Monster
有人能解释一下输出背后的逻辑吗?
【问题讨论】:
-
Vampire不会覆盖frighten(int),它定义了一个重载。在Monster类中将其更改为long,Dragon也不会覆盖该方法。这就是为什么你应该注释方法@Override如果你希望该方法被覆盖。 -
我什至不会称之为继承。您错误地使用了
extends关键字。详细地说,Monster应该是不同类型怪物的模具或蓝图。这没有实现。
标签: java inheritance casting