Herança

A Herança é um dos 4 pilares da programação orientada a objetos (POO) e é um conceito fundamental para o desenvolvimento de software. Ela se refere à capacidade de uma classe (chamada de subclasse ou classe filha) herdar características (atributos e métodos) de outra classe (chamada de superclasse ou classe pai). A subclasse pode então estender ou modificar o comportamento herdado, além de adicionar novos atributos e métodos.

A Herança oferece vários benefícios:

  • Reutilização de Código: a subclasse pode aproveitar as funcionalidades existentes da superclasse;

  • Extensibilidade: a subclasse pode estender ou modificar o comportamento herdado da superclasse;

  • Polimorfismo: permite que objetos de diferentes tipos (superclasse e subclasses) sejam tratados de forma uniforme;

  • Organização e Estruturação: ajuda a organizar e estruturar o código de forma hierárquica, representando relações de "é um" entre classes;

  • Abstração e Generalização: permite a criação de classes abstratas e interfaces que definem um conjunto comum de características para um grupo de classes relacionadas;

  • Permite Modelar Hierarquias de Classes: essencial para modelar objetos do mundo real que tem hierarquias naturais.

A Herança é uma forma fundamental de reuso na programação orientada a objetos (POO).

Reusochevron-right

Definição

A herança é uma forma de reuso em que uma classe (subclasse) herda características (atributos e métodos) de outra classe (superclasse).

Novas classes são criadas para estender as classes existentes. Essas classes podem estender ou modificar o comportamento herdado e adicionar novos atributos e métodos.

O relacionamento "é um [subtipo de]"

Abstração x Mundo Real:

Neste tipo de reuso prevalece o forte acoplamento.

Isso significa que a subclasse herda não apenas os atributos e métodos da superclasse, mas também a implementação desses métodos.

A classe filha não pode remover os atributos e métodos da classe mãe; e essa não conhece os métodos e atributos criados na classe filha.


Java adota o modelo de árvore, cuja classe Object é a raiz dessa hierarquia de classes.

Uma classe Java só pode estender uma outra classe (herança simples) com o uso da palavra reservada extends

Quando uma classe não declara nada, esta (implicitamente) estende Object

Os construtores das subclasses não herdam os construtores das superclasses. Portanto, a chamada a eles deve ser feita pelo uso do comento super()

Classes Constantes

São classes que não podem ser estendidas, isto é, gerar subclasses a partir delas.

Todos os métodos dessa classe são do tipo final

Muito útil em classes que contém funções utilitárias e constantes.

seUma classe constante (final) em Java não é o mesmo que uma classe sealed no .NET.

  • Classe final em Java: Uma classe declarada como final não pode ser estendida (herdada) por nenhuma outra classe. Exemplo:

    Isso significa que ninguém pode criar subclasses de MinhaClasse.

  • Classe sealed no .NET (C#): Uma classe sealed em C# também não pode ser herdada, ou seja, é equivalente ao final do Java:

  • Classe sealed em Java (Java 17+): Java também tem o conceito de sealed class, que permite controlar quais classes podem estender uma classe base:

    Apenas as classes listadas após permits podem herdar de Forma.

Resumo:

  • final em Java = sealed em C#: impede herança.

  • sealed em Java = permite herança restrita a subclasses específicas (mais flexível que final).

Portanto, final em Java é igual a sealed em C#, mas sealed em Java é um conceito mais avançado.

Exercícios

Exercício 1 - Criar as classes Estatutario, Comissionado e Temporario com todos os seus atributos e métodos

Exercício 2 - Criar pelo menos 1 objeto de cada uma das subclasses criadas acima

ServidorPublico.java

Comissionado.java

Estatutario.java

Temporario.java

App.java

Last updated