Neste tutorial, aprenderemos sobre herança Java e seus tipos com a ajuda de um exemplo.
Herança é um dos principais recursos da OOP que nos permite criar uma nova classe a partir de uma classe existente.
A nova classe criada é conhecida como subclasse ( classe filha ou derivada) e a classe existente de onde a classe filha é derivada é conhecida como superclasse (classe pai ou classe base).
A extends
palavra-chave é usada para executar herança em Java. Por exemplo,
class Animal ( // methods and fields ) // use of extends keyword // to perform inheritance class Dog extends Animal ( // methods and fields of Animal // methods and fields of Dog )
No exemplo acima, a classe Dog é criada herdando os métodos e campos da classe Animal.
Aqui, Dog é a subclasse e Animal é a superclasse.
Exemplo 1: Herança Java
class Animal ( // field and method of the parent class String name; public void eat() ( System.out.println("I can eat"); ) ) // inherit from Animal class Dog extends Animal ( // new method in subclass public void display() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access field of superclass labrador.name = "Rohu"; labrador.display(); // call method of superclass // using object of subclass labrador.eat(); ) )
Resultado
Meu nome é Rohu eu posso comer
No exemplo acima, derivamos uma subclasse Dog da superclasse Animal. Observe as declarações,
labrador.name = "Rohu"; labrador.eat();
Aqui, o labrador é um objeto de Cão. No entanto, name e eat()
são os membros da classe Animal.
Como Dog herda o campo e o método de Animal, podemos acessar o campo e o método usando o objeto de Dog.

é um relacionamento
Em Java, herança é um relacionamento é-um . Ou seja, usamos herança apenas se houver um relacionamento é um entre duas classes. Por exemplo,
- Carro é um veículo
- Laranja é uma fruta
- Cirurgião é médico
- Cachorro é um Animal
Aqui, o carro pode herdar do veículo , a laranja pode herdar da fruta e assim por diante.
Substituição de método na herança Java
No Exemplo 1 , vemos que o objeto da subclasse pode acessar o método da superclasse.
No entanto, se o mesmo método estiver presente na superclasse e na subclasse, o que acontecerá?
Nesse caso, o método na subclasse substitui o método na superclasse. Esse conceito é conhecido como substituição de método em Java.
Exemplo 2: Substituição de método na herança Java
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Resultado
Eu como comida de cachorro eu posso latir
No exemplo acima, o eat()
método está presente na superclasse Animal e na subclasse Dog.
Aqui, criamos um objeto labrador de Dog.
Agora, quando chamamos eat()
usando o objeto labrador, o método dentro de Dog é chamado. Isso ocorre porque o método dentro da classe derivada substitui o método dentro da classe base.
Isso é chamado de substituição de método. Para saber mais, visite Java Method Overriding.
Nota : Usamos a @Override
anotação para informar ao compilador que estamos substituindo um método. No entanto, a anotação não é obrigatória. Para saber mais, visite Anotações Java.
super palavra-chave na herança de Java
Anteriormente, vimos que o mesmo método na subclasse substitui o método na superclasse.
Em tal situação, a super
palavra-chave é usada para chamar o método da classe pai a partir do método da classe filha.
Exemplo 3: superpalavra-chave na herança
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( // call method of superclass super.eat(); System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Resultado
Eu posso comer eu como comida de cachorro eu posso latir
No exemplo acima, o eat()
método está presente na classe base Animal e na classe derivada Dog. Observe a declaração,
super.eat();
Aqui, a super
palavra-chave é usada para chamar o eat()
método presente na superclasse.
Também podemos usar a super
palavra-chave para chamar o construtor da superclasse do construtor da subclasse. Para saber mais, visite Java super keyword .
Membros protegidos na herança
Em Java, se uma classe inclui protected
campos e métodos, esses campos e métodos são acessíveis a partir da subclasse da classe.
Example 4: protected Members in Inheritance
class Animal ( protected String name; protected void display() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void getInfo() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access protected field and method // using the object of subclass labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); ) )
Output
I am an animal. My name is Rocky
In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display()
.
We have inherited the Dog class inherits Animal. Notice the statement,
labrador.name = "Rocky"; labrador.display();
Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.
Why use inheritance?
- The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
- Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.
Types of inheritance
There are five types of inheritance.
1. Single Inheritance
Na herança única, uma única subclasse se estende a partir de uma única superclasse. Por exemplo,

2. Herança multinível
Na herança multinível, uma subclasse se estende de uma superclasse e, em seguida, a mesma subclasse atua como uma superclasse para outra classe. Por exemplo,

3. Herança hierárquica
Na herança hierárquica, várias subclasses se estendem de uma única superclasse. Por exemplo,

4. Herança múltipla
Na herança múltipla, uma única subclasse se estende a partir de várias superclasses. Por exemplo,

Nota : Java não oferece suporte a herança múltipla. No entanto, podemos obter herança múltipla usando interfaces. Para saber mais, visite Java implementa herança múltipla.
5. Herança híbrida
A herança híbrida é uma combinação de dois ou mais tipos de herança. Por exemplo,

Aqui, combinamos herança hierárquica e múltipla para formar uma herança híbrida.