我有这个代码来自书 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