Conteúdo do Curso
Java OOP
Java OOP
Princípios da POO: Herança
Herança
Vamos abordar o princípio da POO - Herança.
Herança é um mecanismo que permite a criação de classes com base em outra classe.
A classe que serve como base é chamada de classe pai ou superclasse;
A classe criada com base na classe pai é chamada de classe filha, subclasse ou descendente.
Assim, a classe filha pode herdar as características e propriedades de outra classe - a classe pai (seus métodos e variáveis).
É possível herdar uma classe utilizando a palavra-chave extends
. A sintaxe para uma classe filha herdando de uma classe pai é a seguinte:
Child.java
class Child extends Parent { // properties and methods }
Vamos analisar um exemplo de como a herança funciona no código. Temos uma classe Bird
com determinados campos e métodos, e existe uma classe Parrot
com seus próprios campos e métodos. Um papagaio é um pássaro, então, logicamente, o papagaio deve herdar da classe Bird
:
Aqui está o código da captura de tela, reescrito para melhor legibilidade e clareza:
Bird.java
Parrot.java
Main.java
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
Vamos entender o que está acontecendo nessas imagens:
Criamos uma classe
Bird
, que é a classe pai neste caso. Esta classe possui seus próprios campos e métodos;Criamos uma classe
Parrot
, que utiliza a palavra-chaveextends
para herdar da classe paiBird
. A classeParrot
é uma classe filha e possui seus próprios campos e métodos. Além disso, como classe filha,Parrot
herda todos os campos e métodos da classe paiBird
;Criamos um objeto da classe
Parrot
no métodomain
e vemos que podemos inicializar os campos de ambas as classes, pai e filha. Primeiro, inicializamos os campos da classe paiBird
e, em seguida, inicializamos os campos da classe filhaParrot
. Depois, chamamos os métodos: primeiro, os métodos da classe pai e, depois, o método da classe filha.
Assim, utilizamos a herança para herdar a classe Bird
.
Por que fazemos isso?
Quando temos várias subclasses de Bird
, não apenas Parrot
, por exemplo, também existem Pigeon
e Penguin
. Nesse caso, teremos muitos campos duplicados, como boolean canFly
. O primeiro benefício da herança é evitar trechos de código duplicados.
Além disso, isso melhora significativamente a legibilidade. Na prática, raramente se trabalha diretamente com a classe Bird
e suas subclasses, mas a herança é amplamente utilizada, especialmente com interfaces.
Nota
Você aprenderá sobre interfaces na próxima seção deste curso.
Regras de herança
Herdar apenas uma classe. Java não suporta herança múltipla. Uma classe pode ter apenas um pai;
Tudo é herdado exceto variáveis e métodos
private
.
Nota
Você não pode herdar de si mesmo!
Anteriormente, foi mencionado que uma subclasse teria acesso a todas as variáveis e métodos da classe pai. No entanto, isso não é totalmente verdade.
Na realidade, todos os métodos e variáveis marcados com o modificador private
não são acessíveis à subclasse.
Sobrescrever o método da classe pai.
Vamos imaginar que herdamos uma classe, mas há certas partes do código herdado que não nos agradam. Suponha que queremos que um método específico funcione de maneira diferente do que na classe pai.
Para sobrescrever um método da classe pai, escrevemos @Override
acima dele:
Parrot.java
@Override public void eat() { System.out.println("The parrot is eating"); }
No código acima, sobrescrevemos o método da classe pai, e agora, quando esse método for chamado a partir da classe filha, o método sobrescrito será invocado!
Prevenção de Herança.
Se não desejar que sua classe seja herdada, utilize o modificador final
antes dela.
Por exemplo:
Bird.java
Parrot.java
public final class Bird { // fields and methods }
Dessa forma, ao utilizar a palavra-chave final
, proibimos a herança da classe Bird
.
Estas são apenas as regras fundamentais e características da herança. É um tema amplo, e você irá utilizá-lo com muita frequência. Ao longo do curso, você se familiarizará com outros aspectos da herança e os utilizará com mais frequência.
1. Por que precisamos de herança em Java?
2. De quantas classes podemos herdar ao mesmo tempo?
3. Como podemos impedir a herança em Java?
Obrigado pelo seu feedback!