Inheritance
Una class puede heredar de otra con extends, obteniendo automáticamente acceso a sus fields y methods. super(name) dentro del constructor de una subclass llama al constructor de la parent class, lo cual es obligatorio antes de que el constructor de la subclass pueda hacer cualquier otra cosa cuando la parent no tiene un constructor sin argumentos.
Hacer override con @Override
Marcar un method con @Override le dice al compilador que pretendes reemplazar la versión de la parent class — es opcional, pero detecta errores reales, como un nombre de method mal escrito que de otro modo definiría silenciosamente un method completamente nuevo en vez de hacer override del que querías. dog.speak() llama a la versión propia de Dog, no a la de Animal, porque Dog la hace override.
public class Main {
static class Animal {
String name;
Animal(String name) {
this.name = name;
}
String speak() {
return name + " makes a sound";
}
}
static class Dog extends Animal {
Dog(String name) {
super(name);
}
@Override
String speak() {
return name + " barks";
}
}
public static void main(String[] args) {
Dog dog = new Dog("Rex");
System.out.println(dog.speak());
}
}Rex barks
Siguiente: polymorphism e interfaces — la forma de primera clase que tiene Java de describir comportamiento compartido entre classes no relacionadas.
Practice exercise
Define una class Animal con un field name y un method speak() que devuelva name + " makes a sound". Define una class Cat que extienda Animal y haga override de speak() para devolver name + " meows". Crea un Cat llamado "Whiskers" e imprime su speak().