What's wrong with this example of Java property inheritance? -
inheritance.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()); } }
animal.java
public class animal { protected string sound; public string speak(){ return sound; } }
cat.java
public class cat extends animal { protected string sound = "meow"; }
dog.java
public class dog extends animal { protected string sound = "woof"; }
output:
null null
my animals cannot speak. sad.
fields aren't polymorphic. you've declared 3 entirely distinct fields... ones in cat
, dog
shadow or hide 1 in animal
.
the simplest (but not best) way of getting current code remove sound
cat
, dog
, , set value of inherited sound
field in constructor cat
, dog
.
a better approach make animal
abstract, , give protected constructor takes sound... constructors of cat
, dog
call super("meow")
, super("woof")
respectively:
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"); } }
Comments
Post a Comment