私は本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. }
このコードを実行した結果は「毛皮のようなブレイ」です。
質問1
17行目がそうでない理由がわかりません:Zebra zebra2 = new Zebra();
次の各場合の目的は何ですか、いつどのように使用しますか?
Mammal zebra1 = new Zebra();
vs
Zebra zebra2 = new Zebra();
質問2
クラスの変数name = "stripes"
がクラスのからZebra
オーバーライドされるのはなぜですか?私は反対を期待しています:サブクラスからの変数はスーパークラスからの変数をオーバーライドします。name = "furry"
Mammal