Java inheritance and method overriding

extends establishes a superclass relationship. An overriding instance method replaces inherited behavior for that object's runtime type.

Java
class Animal {
    String speak() { return "sound"; }
}
class Dog extends Animal {
    @Override String speak() { return "woof"; }
}
class Cat extends Animal {
    @Override String speak() { return "meow"; }
}
class Main {
    public static void main(String[] args) {
        Animal[] animals = {new Dog(), new Cat()};
        for (Animal animal : animals) {
            System.out.println(animal.speak());
        }
    }
}
Read the full lesson