我有这个代码来自书 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 行不是: Zebra zebra2 = new Zebra();
以下每种情况的目的是什么,什么时候使用?
Mammal zebra1 = new Zebra();
对比
Zebra zebra2 = new Zebra();
问题2
为什么类中的变量name = "stripes"
会被类中的变量Zebra
覆盖?我希望相反:来自子类的变量将覆盖来自超类的变量。name = "furry"
Mammal