Menu
Coddy logo textTech

Herança Básica (extends)

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 20 de 87.

Herança é um dos pilares fundamentais da POO. Ela permite que uma classe adquira as propriedades e métodos de outra classe, promovendo a reutilização de código e estabelecendo uma hierarquia natural entre as classes.

Em Java, você cria uma relação de herança usando a palavra-chave extends. A classe que herda é chamada de subclasse (ou classe filha), e a classe da qual se herda é a superclasse (ou classe pai).

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Chama o construtor pai
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

A classe Dog herda automaticamente o método eat() e o método getName() de Animal. Ela também pode definir seus próprios métodos como bark():

Dog myDog = new Dog("Buddy");
myDog.eat();   // Herdado: "Buddy is eating"
myDog.bark();  // Método próprio: "Buddy says woof!"

Pense na herança como uma relação do tipo "é um". Um Dog é um Animal, então faz sentido que Dog estenda Animal. Essa relação permite que você construa classes especializadas que compartilham funcionalidades comuns, ao mesmo tempo em que adicionam seus próprios comportamentos únicos.

challenge icon

Desafio

Fácil

Vamos construir um sistema de veículos simples que demonstra a herança em ação. Você criará uma classe pai que contém propriedades comuns de veículos e uma classe filha que a estende com um comportamento especializado.

Você organizará seu código em três arquivos:

  • Vehicle.java: Crie a classe pai que representa qualquer veículo. Ela deve ter:
    • Um campo privado para a brand do veículo (String)
    • Um construtor que aceita o nome da marca (o uso de super() não é necessário aqui, pois Vehicle é o pai)
    • Um método getBrand() que retorna a marca
    • Um método start() que imprime: [brand] is starting
  • Motorcycle.java: Crie uma subclasse que estende Vehicle. Uma motocicleta é um veículo, então essa relação "é-um" torna a herança apropriada. Sua Motorcycle deve:
    • Usar extends para herdar de Vehicle
    • Ter um construtor que recebe a marca e a passa para o pai usando super(brand)
    • Adicionar seu próprio método wheelie() que imprime: [brand] is doing a wheelie!
  • Main.java: Reúna tudo criando um objeto Motorcycle e demonstrando comportamentos herdados e únicos. Você receberá uma entrada: o nome da marca. Imprima duas linhas chamando:
    • O método herdado start()
    • O método próprio da Motorcycle wheelie()

Você receberá uma entrada: o nome da marca (String) para sua motocicleta.

Observe como sua Motorcycle tem acesso automático a start() e getBrand() sem precisar reescrevê-los - esse é o poder da herança!

Folha de consulta

Use a palavra-chave extends para criar uma relação de herança entre classes:

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Chama o construtor pai
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

A subclasse (filha) herda todos os métodos da superclasse (pai) e pode adicionar os seus próprios:

Dog myDog = new Dog("Buddy");
myDog.eat();   // Método herdado
myDog.bark();  // Método próprio

Use super() no construtor da subclasse para chamar o construtor da classe pai.

A herança representa uma relação do tipo "é um" (is-a) entre classes.

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String brand = scanner.nextLine();
        
        // TODO: Crie um objeto Motorcycle com a brand
        
        // TODO: Chame o método start() herdado
        
        // TODO: Chame o método wheelie()
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos