Animal Sounds
Completed
Create a base class Animal(String name) with String sound() returning ... and describe() returning NAME says SOUND. Subclasses Dog and Cat override sound(). Read lines type name and print each description.
Input
n, then n lines (dog, cat or animal).
Output
n lines.
Example
Input
3 dog Rex cat Tom animal Blob
Output
Rex says woof Tom says meow Blob says ...
Editor
Java
Hints
super(name) calls the parent constructor.
describe() in Animal calls whichever sound() the object really has.
Solution explanation
Overriding lets subclasses change one piece of behaviour while reusing the rest.
Show solution
import java.util.Scanner;
class Animal {
protected final String name;
Animal(String name) {
this.name = name;
}
String sound() {
return "...";
}
String describe() {
return name + " says " + sound();
}
}
class Dog extends Animal {
Dog(String name) {
super(name);
}
@Override
String sound() {
return "woof";
}
}
class Cat extends Animal {
Cat(String name) {
super(name);
}
@Override
String sound() {
return "meow";
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
String type = sc.next();
String name = sc.next();
Animal a = type.equals("dog") ? new Dog(name) : type.equals("cat") ? new Cat(name) : new Animal(name);
System.out.println(a.describe());
}
}
}