代码之家  ›  专栏  ›  技术社区  ›  maček

这个Java属性继承的例子有什么不对吗?

  •  13
  • maček  · 技术社区  · 14 年前

    继承.java

    public class InheritanceExample {
      static public void main(String[] args){
        Cat c = new Cat();
        System.out.println(c.speak());
    
        Dog d = new Dog();
        System.out.println(d.speak());
      }
    }
    

    Java语言

    public class Animal {
      protected String sound;
      public String speak(){
        return sound;
      }
    }
    

    爪哇猫

    public class Cat extends Animal {
      protected String sound = "meow";
    }
    

    爪哇岛

    public class Dog extends Animal {
      protected String sound = "woof";
    }
    

    输出:

    null
    null
    

    我的动物不会说话。如此悲伤。

    7 回复  |  直到 9 年前
        1
  •  10
  •   Jon Skeet    14 年前

    Cat Dog Animal

    sound

    super("meow") super("woof")

    public abstract class Animal {
        private final String sound;
    
        protected Animal(String sound) {
            this.sound = sound;
        }
    
        public String speak(){
            return sound;
        }
    }
    
    public class Cat extends Animal {
        public Cat() {
            super("meow");
        }
    }
    
    public class Dog extends Animal {
        public Dog() {
            super("woof");
        }
    }
    
        2
  •  4
  •   Grodriguez    14 年前

    sound Dog Cat Animal

    public class Dog extends Animal {
      public Dog() {
        sound = "woof";
      }
    }
    
    public class Cat extends Animal {
      public Cat() {
        sound = "meow";
      }
    }
    

    speak

    public abstract class Animal {
      public abstract String speak();
    }
    
    public class Dog extends Animal {
      public String speak {
        return "woof";
      }
    }
    
    public class Cat extends Animal {
      public String speak {
        return "meow";
      }
    }
    
        3
  •  0
  •   Joonas Pulakka    14 年前

    sound Animal String Cat

    super.sound = "meow";
    

    protected String sound = "meow";
    

        4
  •  0
  •   anirvan    14 年前

        5
  •  0
  •   gustafc    14 年前

    shadowing Animal

    public class Animal {
      private final String sound;
      protected Animal(String sound){
        if (sound == null)
          throw new NullPointerException("sound");
        this.sound = sound;
      }
      public String speak(){
        return sound;
      }
    }
    
    public class Cat extends Animal {
      public Cat(){ super("meow"); }
    }
    
    public class Dog extends Animal {
      public Dog(){ super("woof"); }
    }
    

        6
  •  0
  •   Tassos Bassoukos    14 年前

        7
  •  0
  •   Vini.g.fer    9 年前

    public class Cat extends Animal {
    //  protected String sound = "meow";
    
        public Cat(){
            this.sound = "cat";
        }
    
    }
    

    public class Dog extends Animal {
    // protected String sound = "woof";
    
        public Dog(){
            this.sound = "dog";
        }
    }