【发布时间】:2012-08-27 05:23:22
【问题描述】:
我有这个来自 SCJP 书的代码:
1. class Mammal {
2. String name = "furry ";
3. String makeNoise() { return "generic noise"; }
4. }
5.
6. class Zebra extends Mammal {
7. String name = "stripes ";
8. String makeNoise() { return "bray"; }
9. }
10.
11. public class ZooKeeper {
12. public static void main(String[] args) {
13. new ZooKeeper().go();
14. }
15.
16. void go() {
17. Mammal m = new Zebra();
18. System.out.println(m.name + m.makeNoise());
19. }
20. }
运行此代码的结果是“furry bray”。
问题 1
我不明白为什么第 17 行不是: 斑马斑马2 =新斑马();
以下每种情况的目的是什么,什么时候使用?
Mammal zebra1 = new Zebra();
对
Zebra zebra2 = new Zebra();
问题 2
为什么Zebra 类中的变量name = "stripes" 被Mammal 类中的name = "furry" 覆盖?我希望相反:子类中的变量将覆盖超类中的变量。
【问题讨论】:
标签: java inheritance polymorphism