13.1 Herança e Polimorfismo em Java: Conceito de Herança

A herança é um dos pilares fundamentais da programação orientada a objetos (POO), e o Java, sendo uma linguagem que adota esse paradigma, oferece recursos robustos para sua implementação. Herança é um mecanismo que permite que uma nova classe derive propriedades e comportamentos de uma classe existente. A classe que é herdada é chamada de classe base, superclasse ou classe pai, enquanto a classe que herda é conhecida como classe derivada, subclasse ou classe filha.

Na prática, a herança possibilita a reutilização de código e a criação de uma hierarquia de classes relacionadas. Isso não só economiza tempo e esforço no desenvolvimento de software, mas também ajuda a manter o código organizado, mais fácil de manter e expandir.

Como a Herança Funciona em Java

Em Java, a herança é realizada com a palavra-chave extends. Quando uma classe é definida como a extensão de outra, ela herda todos os campos não privados (atributos) e métodos da classe pai. Isso significa que a classe filha pode usar esses membros como se fossem seus.

Exemplo:

class Vehicle {
    protected String brand = "Ford"; // Atributo da classe Vehicle
    public void honk() {             // Método da classe Vehicle
        System.out.println("Tuut, tuut!");
    }
}

class Car extends Vehicle {
    private String modelName = "Mustang"; // Atributo da classe Car
    public static void main(String[] args) {
        // Cria um objeto da classe Car
        Car myCar = new Car();

        // Chama o método da classe Vehicle
        myCar.honk();

        // Acessa o atributo da classe Vehicle
        System.out.println(myCar.brand + " " + myCar.modelName);
    }
}

Neste exemplo, Car é uma subclasse de Vehicle. A classe Car herda o método honk e o atributo brand da classe Vehicle, e também define seu próprio atributo, modelName.

Sobrescrita de Métodos

Uma subclasse em Java pode sobrescrever os métodos da superclasse. Isso é feito quando a subclasse precisa de uma implementação específica para um método herdado. A sobrescrita é uma forma de polimorfismo, que será discutido mais adiante.

Exemplo:

class Animal {
    public void sound() {
        System.out.println("O animal faz um som");
    }
}

class Pig extends Animal {
    public void sound() {
        System.out.println("O porco diz: wee wee");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // Cria um objeto da classe Animal
        Animal myPig = new Pig();       // Cria um objeto da classe Pig

        myAnimal.sound();
        myPig.sound();
    }
}

Neste exemplo, a classe Pig sobrescreve o método sound da classe Animal. Quando o método é chamado no objeto myPig, a implementação da classe Pig é usada, não a da classe Animal.

Uso do super

A palavra-chave super em Java é usada dentro de métodos de subclasses para fazer referência a membros (métodos ou atributos) da superclasse. Isso é útil especialmente quando estamos sobrescrevendo métodos, mas queremos ainda assim acessar a implementação da superclasse.

Exemplo:

class Animal {
    public void sound() {
        System.out.println("O animal faz um som");
    }
}

class Pig extends Animal {
    public void sound() {
        super.sound(); // Chama o método da superclasse
        System.out.println("O porco diz: wee wee");
    }
}

Aqui, a classe Pig chama o método sound da superclasse Animal antes de executar seu próprio código.

O Polimorfismo em Java

O polimorfismo, outro pilar da POO, permite que objetos de diferentes classes sejam tratados como objetos de uma superclasse comum. Isso é particularmente poderoso em combinação com a herança, pois permite que um único método ou classe opere em objetos de diferentes classes.

Polimorfismo em Java é, em sua maioria, realizado através de sobrecarga e sobrescrita de métodos. A sobrecarga ocorre quando dois ou mais métodos na mesma classe têm o mesmo nome, mas parâmetros diferentes. A sobrescrita, como vimos, é quando uma subclasse fornece uma implementação específica para um método que já é fornecido por sua superclasse.

Exemplo de polimorfismo:

class Animal {
    public void sound() {
        System.out.println("O animal faz um som");
    }
}

class Pig extends Animal {
    public void sound() {
        System.out.println("O porco diz: wee wee");
    }
}

class Dog extends Animal {
    public void sound() {
        System.out.println("O cachorro diz: bow wow");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myPig = new Pig();
        Animal myDog = new Dog();

        myAnimal.sound();
        myPig.sound();
        myDog.sound();
    }
}

Neste exemplo, a classe Main cria objetos de diferentes tipos, mas todos são tratados como instâncias da classe Animal. Isso demonstra polimorfismo, pois o método sound se comporta de maneira diferente dependendo do tipo de objeto que o invoca.

Conclusão

A herança e o polimorfismo são conceitos chave na programação orientada a objetos e são extensivamente utilizados em Java para criar código reutilizável e sistemas extensíveis. Ao compreender e aplicar esses conceitos, desenvolvedores podem escrever código mais limpo, mais modular e mais fácil de manter.

Espera-se que este curso sobre Java forneça uma compreensão sólida desses conceitos, permitindo que você os aplique em cenários do mundo real e construa aplicações robustas e eficientes.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre herança em Java está correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Herança e Polimorfismo em Java: Palavra-chave 'extends'

Próxima página do Ebook Gratuito:

86Herança e Polimorfismo em Java: Palavra-chave 'extends'

5 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto