Herança Java
Herança Java
Neste tutorial, aprenderemos sobre herança Java e seus tipos com a ajuda do exemplo.
A 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 subclass (classe filha ou derivada) e a classe existente de onde a classe filha é derivada é conhecida como superclasse (classe pai ou base).
O extends
A 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, o Cão A classe é criada herdando os métodos e campos da classe Animal classe.
Aqui, Cão é 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();
}
}
Saída
My name is Rohu I can eat
No exemplo acima, derivamos uma subclasse Dog da superclasse Animal . Observe as afirmações,
labrador.name = "Rohu";
labrador.eat();
Aqui, labrador é um objeto de Cão . No entanto, nome e
eat()
são os membros do Animal classe. Desde Cão herda o campo e o método de Animal , podemos acessar o campo e o método usando o objeto do Dog .
é-um relacionamento
Em Java, herança é um is-a relação. Ou seja, usamos herança somente se existir um relacionamento é-um entre duas classes. Por exemplo,
- Carro é um veículo
- Laranja é uma fruta
- Cirurgião é um Doutor
- Cão é um Animal
Aqui, Carro pode herdar de Veículo , Laranja pode herdar de Frutas , 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 da subclasse substitui o método da 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();
}
}
Saída
I eat dog food I can bark
No exemplo acima, o
eat()
está presente na superclasse Animal e a subclasse Cão . Aqui, criamos um objeto labrador de Cão .
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 Sobreposição do método Java.
Observação :Usamos o
@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 Java
Anteriormente, vimos que o mesmo método na subclasse substitui o método na superclasse.
Em tal situação, o
super
A 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();
}
}
Saída
I can eat I eat dog food I can bark
No exemplo acima, o
eat()
está presente tanto na classe base Animal e a classe derivada Cão . Observe a afirmação,
super.eat();
Aqui, o
super
palavra-chave é usada para chamar o eat()
método presente na superclasse. Também podemos usar o
super
palavra-chave para chamar o construtor da superclasse do construtor da subclasse. Para saber mais, visite a superpalavra-chave Java. Membros protegidos na herança
Em Java, se uma classe inclui
protected
campos e métodos, então esses campos e métodos são acessíveis a partir da subclasse da classe. Exemplo 4:membros protegidos na herança
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();
}
}
Saída
I am an animal. My name is Rocky
No exemplo acima, criamos uma classe chamada Animal. A classe inclui um campo protegido:name e um método:
display()
. Herdamos o Cão classe herda Animal . Observe a afirmação,
labrador.name = "Rocky";
labrador.display();
Aqui, podemos acessar o campo protegido e o método da superclasse usando o labrador objeto da subclasse.
Por que usar herança?
- O uso mais importante da herança em Java é a reutilização de código. O código presente na classe pai pode ser usado diretamente pela classe filha.
- A substituição de método também é conhecida como polimorfismo de tempo de execução. Portanto, podemos alcançar o polimorfismo em Java com a ajuda da herança.
Tipos de herança
Existem cinco tipos de herança.
1. Herança única
Na herança simples, uma única subclasse se estende 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 de várias superclasses. Por exemplo,
Observação :Java não suporta 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.
Java