Princípios da OOP: Herança
Herança
Vamos falar sobre 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 pai ou superclasse.
- A classe criada com base na classe pai é chamada de filho, subclasse ou descendente.
Assim, a classe filho pode herdar as características e propriedades de outra classe - a classe pai (seus métodos e variáveis).
Você pode herdar uma classe usando a palavra-chave extends
. A sintaxe para uma classe filho herdar de uma classe pai é assim:
Child.java
Let's take a look at an example of how inheritance works in code. We have a class Bird
with certain fields and methods, and there is a class Parrot
with its own fields and methods. A parrot is a bird, so logically, the parrot should inherit from the Bird
class:
Vamos entender o que está acontecendo nessas imagens:
- Criamos uma classe
Bird
, que é a classe pai no nosso caso. Essa classe tem seus próprios campos e métodos; - Criamos uma classe
Parrot
, que usa 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 uma 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 depois inicializamos os campos da classe filhaParrot
. Em seguida, chamamos os métodos: primeiro, os métodos da classe pai, e depois o método da classe filha.
Assim, usamos herança para herdar a classe Bird
.
Por que fazemos isso?
Quando temos muitas subclasses diferentes de Bird
, não apenas Parrot
, por exemplo, existem também Pigeon
e Penguin
. Nesse caso, teríamos muitos campos duplicados, como boolean canFly
. A primeira coisa que a herança ajuda é a evitar fragmentos de código duplicados.
Além disso, ela melhora significativamente a legibilidade. Na prática, raramente você encontra a classe Bird
e suas subclasses diretamente, mas a herança é comumente usada, principalmente com interfaces.
Nota
Você aprenderá sobre interfaces na próxima seção deste curso.
Regras de herança
- Herde apenas uma classe. Java não suporta herança múltipla. Uma classe pode ter apenas um pai.
Nota
Você não pode herdar de si mesmo!
- Tudo é herdado exceto variáveis e métodos
privados
.
Anteriormente, mencionei que uma subclasse teria acesso a todas as variáveis e métodos dos pais. 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 para a subclasse.
- Sobrescrever o método da classe pai.
Vamos imaginar que herdamos uma classe, mas há certas partes do código herdado de que não gostamos. Suponha que queremos que um método específico funcione de maneira diferente da classe pai.
Para sobrescrever um método da classe pai, escrevemos @Override
acima dele:
Parrot.java
No código acima, nós sobrescrevemos o método da classe pai, e agora, quando esse método é chamado a partir da classe filho, o método sobrescrito será invocado!
- Prevenindo Herança.
Se você não deseja que ninguém herde sua classe, use o modificador final
antes dela.
Por exemplo:
Bird.java
Parrot.java
Dessa forma, ao utilizar a palavra-chave final
, nós proibimos a herança da classe Bird
.
Essas são apenas as regras fundamentais e características da herança. É um tópico vasto, e você utilizará frequentemente. Ao longo do curso, você se familiarizará com outros aspectos da herança e os utilizará com mais frequência.
Tudo estava claro?
Conteúdo do Curso
Java OOP
Java OOP
Princípios da OOP: Herança
Herança
Vamos falar sobre 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 pai ou superclasse.
- A classe criada com base na classe pai é chamada de filho, subclasse ou descendente.
Assim, a classe filho pode herdar as características e propriedades de outra classe - a classe pai (seus métodos e variáveis).
Você pode herdar uma classe usando a palavra-chave extends
. A sintaxe para uma classe filho herdar de uma classe pai é assim:
Child.java
Let's take a look at an example of how inheritance works in code. We have a class Bird
with certain fields and methods, and there is a class Parrot
with its own fields and methods. A parrot is a bird, so logically, the parrot should inherit from the Bird
class:
Vamos entender o que está acontecendo nessas imagens:
- Criamos uma classe
Bird
, que é a classe pai no nosso caso. Essa classe tem seus próprios campos e métodos; - Criamos uma classe
Parrot
, que usa 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 uma 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 depois inicializamos os campos da classe filhaParrot
. Em seguida, chamamos os métodos: primeiro, os métodos da classe pai, e depois o método da classe filha.
Assim, usamos herança para herdar a classe Bird
.
Por que fazemos isso?
Quando temos muitas subclasses diferentes de Bird
, não apenas Parrot
, por exemplo, existem também Pigeon
e Penguin
. Nesse caso, teríamos muitos campos duplicados, como boolean canFly
. A primeira coisa que a herança ajuda é a evitar fragmentos de código duplicados.
Além disso, ela melhora significativamente a legibilidade. Na prática, raramente você encontra a classe Bird
e suas subclasses diretamente, mas a herança é comumente usada, principalmente com interfaces.
Nota
Você aprenderá sobre interfaces na próxima seção deste curso.
Regras de herança
- Herde apenas uma classe. Java não suporta herança múltipla. Uma classe pode ter apenas um pai.
Nota
Você não pode herdar de si mesmo!
- Tudo é herdado exceto variáveis e métodos
privados
.
Anteriormente, mencionei que uma subclasse teria acesso a todas as variáveis e métodos dos pais. 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 para a subclasse.
- Sobrescrever o método da classe pai.
Vamos imaginar que herdamos uma classe, mas há certas partes do código herdado de que não gostamos. Suponha que queremos que um método específico funcione de maneira diferente da classe pai.
Para sobrescrever um método da classe pai, escrevemos @Override
acima dele:
Parrot.java
No código acima, nós sobrescrevemos o método da classe pai, e agora, quando esse método é chamado a partir da classe filho, o método sobrescrito será invocado!
- Prevenindo Herança.
Se você não deseja que ninguém herde sua classe, use o modificador final
antes dela.
Por exemplo:
Bird.java
Parrot.java
Dessa forma, ao utilizar a palavra-chave final
, nós proibimos a herança da classe Bird
.
Essas são apenas as regras fundamentais e características da herança. É um tópico vasto, e você utilizará frequentemente. Ao longo do curso, você se familiarizará com outros aspectos da herança e os utilizará com mais frequência.
Tudo estava claro?