Herança Java (com exemplos)

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 extendspalavra-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.

Implementação de herança Java

é 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 @Overrideanotaçã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 superpalavra-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 superpalavra-chave é usada para chamar o eat()método presente na superclasse.

Também podemos usar a superpalavra-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 protectedcampos 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,

Herança única Java

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,

Herança Java Multilevel

3. Herança hierárquica

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

Herança hierárquica Java

4. Herança múltipla

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

Herança múltipla Java

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,

Herança híbrida Java

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

Artigos interessantes...