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());
}
}
Run Code Online (Sandbox Code Playgroud)
public class Animal {
protected String sound;
public String speak(){
return sound;
}
}
Run Code Online (Sandbox Code Playgroud)
public class Cat extends Animal {
protected String sound = "meow";
}
Run Code Online (Sandbox Code Playgroud)
public class Dog extends Animal {
protected String sound = "woof";
}
Run Code Online (Sandbox Code Playgroud)
null
null
Run Code Online (Sandbox Code Playgroud)
我的动物不会说话.好难过.
Jon*_*eet 10
字段不是多态的.你已经声明了三个完全不同的字段......其中的字段Cat和Dog 阴影或隐藏的字段Animal.
最简单的(但不一定是最好的),让你的当前代码的方法是删除sound从Cat和Dog,并设置的值继承 sound场在构造函数Cat和Dog.
更好的方法是使Animal抽象的,并给它一个受保护的构造这需要声音...的建设者Cat和Dog再会打电话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");
}
}
Run Code Online (Sandbox Code Playgroud)