Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Sobrescrita
Apresentação
A abordagem principal na programação orientada a objetos (POO) diz respeito ao design de um 
sistema e seus componentes, que incluem entidades, objetos e relacionamentos. Diferentes 
métodos são utilizados para determinar o comportamento dos objetos, abrangendo aspectos como 
estado, funções e procedimentos da programação estruturada.
Um dos métodos utilizados na POO é a sobrescrita, que está diretamente ligada à herança. Esse 
método envolve a existência de um método na classe-mãe, que é herdado pela classe-filha, mas 
implementado de forma diferente, mantendo a mesma assinatura. Sobrescrever um método 
significa substituir a implementação da superclasse daquele método com a sua própria, mantendo a 
mesma assinatura, mas alterando o comportamento. O tipo de retorno pode variar de maneira 
particular.
Nesta Unidade de Aprendizagem, você vai explorar as características da sobrescrita e da assinatura 
de método, bem como identificar a herança e compreender conceitos básicos sobre a construção 
de um aplicativo. Com isso, é possível construir um aplicativo com uma estrutura de herança 
fazendo uso da sobrescrita de métodos.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Definir o que é sobrescrita e assinatura de método.•
Identificar herança.•
Construir um aplicativo com uma estrutura de herança fazendo uso de sobrescrita de 
métodos.
•
 
Desafio
No paradigma da POO, a aplicação de cálculos deve ser implementada com base em boas práticas, 
considerando os pilares da POO, entre eles a herança e a sobrescrita. Existem diferentes maneiras 
de implementar o cálculo de figuras geométricas. A herança permite a reutilização do código e 
define métodos abstratos da classe-pai, já a sobrescrita de método permite realizar o cálculo 
correto da área de cada figura.
Para implementar o cálculo com base em uma figura geométrica, é necessário utilizar a forma 
adequada e saber o tipo de figura. O cálculo da área também exige a definição de métodos 
abstratos na classe abstrata e a definição de herança para efetivar métodos.
Analise a seguinte situação:
A imagem a seguir possui audiodescrição.
Para comprovar a entrega do projeto, considere os seguintes entregáveis:
a) Salve o projeto com o nome “CalculoArea” e encaminhe o arquivo zipado como anexo na 
plataforma.
b) Descreva brevemente os passos que foram seguidos para a construção do programa. Fale sobre 
estrutura do aplicativo, superclasses, métodos, classes de chamadas e valores inseridos.
Infográfico
A sobrescrita é uma característica permanente da linguagem orientada a objetos. Por isso, quando a 
versão de um método é executada, a ação será determinada pelo objeto usado para invocá-la. Se 
um objeto de uma classe-pai é usado para chamar o método, a versão na classe-pai é executada; no 
entanto, se um objeto da subclasse é utilizado para chamar o método, a versão na classe-filha é 
executada.
Algumas linguagens deixam que os programadores escolham entre utilizar e evitar que métodos 
sejam sobrepostos. A principal propriedade da substituição de método é que a classe pode prover 
sua própria implementação específica para um método herdado sem modificar o código da classe-
pai.
Veja, neste Infográfico, os conceitos de sobrescrita.
A imagem a seguir possui audiodescrição.
Aponte a câmera para o 
código e acesse o link do 
conteúdo ou clique no 
código para acessar.
 
https://statics-marketplace.plataforma.grupoa.education/sagah/5cc17562-a541-4a31-a88a-e113da7fa856/31f4c63b-fc93-43ee-bcea-44c752486b9a.png
Conteúdo do Livro
A programação orientada a objetos consolidou-se como um dos paradigmas mais utilizados no 
desenvolvimento de software moderno, pois possibilita criar sistemas estruturados, modulares e 
alinhados ao comportamento das entidades do mundo real. Seu principal fundamento está na 
definição de classes e objetos, que encapsulam dados e comportamentos, promovendo 
organização, reuso e clareza na construção de aplicações de diversos tamanhos e níveis de 
complexidade. 
Entre os mecanismos que tornam esse paradigma tão expressivo, a herança ocupa posição central. 
Por meio dela, é possível estabelecer relações de especialização entre classes, permitindo que uma 
estrutura mais geral seja estendida por tipos mais específicos. Complementando esse mecanismo, a 
sobrescrita de métodos possibilita que subclasses redefinam comportamentos herdados, 
adequando-os a necessidades particulares. Essa flexibilidade é essencial para criar sistemas 
extensíveis, manter código coeso e explorar os benefícios do polimorfismo, tornando o software 
mais adaptável a contextos variados. 
No capítulo Sobrescrita, você vai ver os conceitos de sobrecarga de métodos e sobrescrita de 
métodos e a diferença entre eles. Também vai estudar a implementação de herança em Java e, por 
fim, como construir uma aplicação com uma estrutura de herança usando a sobrescrita de métodos. 
Esses recursos são amplamente utilizados na programação orientada a objetos. Dominando-os, 
você poderá escrever códigos mais eficientes e organizados, reduzindo redundâncias e melhorando 
a manutenção e a evolução do seu software. 
Boa leitura.
Os elementos gráficos deste capítulo possuem audiodescrição. Para acessar o recurso, 
clique aqui 
 
https://creator-files.plataforma.grupoa.education/undefined/9113_Audiodescricao_Conteudo_Livro-2026-04-22T10:37:11-03:00.pdf
PROGRAMAÇÃO 
ORIENTADA A 
OBJETOS
OBJETIVOS DE APRENDIZAGEM
 > Identificar o conceito de herança.
 > Definir o que é sobrescrita e assinatura de método.
 > Construir um aplicativo com uma estrutura de herança fazendo uso de 
sobrescrita de métodos.
Introdução
A programação orientada a objetos (POO) consolidou-se como um dos para-
digmas mais importantes no desenvolvimento de software contemporâneo, 
sobretudo em linguagens como Java, amplamente utilizada na indústria, na 
academia e em plataformas corporativas. Seu conjunto de conceitos — classes, 
objetos, encapsulamento, herança e polimorfismo — permite a construção de 
sistemas modulares, extensíveis e organizados, além de facilitar a modelagem 
de problemas complexos por meio de abstrações próximas ao mundo real. Como 
afirmam Deitel e Deitel (2010), compreender profundamente esses mecanismos 
é essencial para desenvolver aplicações robustas e alinhadas às boas práticas 
de engenharia de software.
Dentre esses mecanismos, a herança e a sobrescrita de métodos recebem 
papel de destaque na estruturação de hierarquias de classes e na promoção 
do polimorfismo, permitindo que objetos de uma subclasse especializem 
comportamentos herdados de suas superclasses. Horstmann (2021) descreve 
a herança como uma forma de estender classes existentes, facilitando o reuso 
de código e a criação de sistemas mais flexíveis. Já a sobrescrita de métodos 
garante que uma classe derivada possa adaptar comportamentos, garantindo 
Sobrescrita
Hygo Sousa De Oliveira
coerência com necessidades específicas, como detalhado também por Bigonha 
(2021) ao discutir modularidade e especialização em Java. 
Neste capítulo, você vai aprofundar esses elementos fundamentais da POO, 
explorando o conceito de herança, sua estrutura em Java e seus benefícios no 
processo de modelagem, analisando sobrescrita de métodos e sua relação com 
a assinatura. Além disso, verá um exemplo prático completo, implementado em 
Java, no qual construiremos uma pequena hierarquia de classes e exibiremos 
os efeitos da sobrescrita durante a execução do programa.
Conceito de herança na programação 
orientada a objetos 
A herança é um dos pilares mais importantes da programação orientada a 
objetos (POO), permitindo que classes compartilhem características e com-
portamentos de forma estruturada. No contexto da linguagem Java, a herança 
possibilita que uma classe derivada — chamada subclasse — reutilize atributos 
e métodos já definidos em outra classe — a superclasse. Segundo Horstmann 
(2021), esse mecanismo promoveextensibilidade, evitando duplicação de 
código e contribuindo para um design mais claro e modular do sistema. Assim, 
em vez de reescrever funcionalidades semelhantes em diferentes partes do 
programa, o desenvolvedor pode centralizar comportamentos comuns em 
uma superclasse e especializá-los em subclasses.
Sob uma perspectiva conceitual, a herança reflete relações do mundo real. 
Muitas vezes, queremos modelar entidades que compartilham propriedades 
comuns, mas que também apresentam comportamentos específicos. Deitel 
e Deitel (2010) observam que esse recurso possibilita organizar classes em 
hierarquias, nas quais as características comuns são mantidas em níveis su-
periores, enquanto as particularidades aparecem nos níveis mais específicos. 
Em uma aplicação de gestão de funcionários, por exemplo, pode existir uma 
classe mais genérica Funcionario, da qual derivam Professor, Tecnico 
ou Administrador, cada uma ampliando ou especializando os atributos e 
métodos herdados.
Em Java, a herança é estabelecida por meio da palavra-chave extends, 
que indica explicitamente a relação entre as classes. Essa relação cria uma 
estrutura hierárquica na qual a subclasse obtém todos os atributos e métodos 
públicos e protegidos da superclasse. Bigonha (2021), ao discutir a modulari-
dade aplicada à linguagem Java, destaca que a herança é uma forma natural 
de organizar sistemas baseados em tipos, contribuindo para a coesão dos 
módulos e reforçando a noção de especialização. Essa estrutura não apenas 
Sobrescrita2
simplifica o desenvolvimento inicial, mas também favorece a evolução do 
software, uma vez que modificações na superclasse podem beneficiar auto-
maticamente todas as subclasses. A Figura 1 apresenta os tipos de heranças 
suportadas pela linguagem Java. 
Figura 1. Com base no contexto de classe, existem três tipos de herança em Java: simples, 
multinível e hierárquica. Na programação Java, a herança múltipla e híbrida é suportada 
apenas por meio de interfaces.
Outro aspecto relevante da herança é sua estreita relação com o polimor-
fismo, um dos pilares da programação orientada a objetos. O polimorfismo 
consiste na capacidade de um mesmo método produzir comportamentos 
diferentes, conforme a instância da subclasse que o implementa. Como expli-
cam Ascencio e Campos (2012), a herança permite que objetos de diferentes 
subclasses sejam tratados como instâncias de uma superclasse comum, 
promovendo maior flexibilidade no desenvolvimento de sistemas. Essa ca-
racterística é especialmente útil em coleções heterogêneas, nas quais os 
objetos compartilham uma estrutura geral, mas respondem de forma distinta 
durante a execução.
Do ponto de vista sintático, todas as classes em Java são, direta ou in-
diretamente, subclasses de uma superclasse especial chamada Object, que 
ocupa o topo da hierarquia de classes da linguagem. Isso significa que, mesmo 
que o programador não declare explicitamente uma superclasse, toda classe 
criada herda, por padrão, os métodos definidos em Object. Como destaca 
Horstmann (2021), entre esses métodos herdados estão toString() — que 
retorna uma representação textual do objeto — e equals() — que permite 
comparar se dois objetos são logicamente equivalentes. Esses métodos 
podem ser sobrescritos nas subclasses para ajustar seu comportamento às 
necessidades específicas da aplicação. Esse mecanismo mostra que a herança, 
em Java, vai além das estruturas criadas pelo desenvolvedor: ela faz parte 
Sobrescrita 3
do próprio funcionamento interno da linguagem e garante a uniformidade e 
a extensibilidade do modelo orientado a objetos.
Para além do reaproveitamento de código, a herança exerce um papel 
estratégico na arquitetura de sistemas orientados a objetos. Ela incorpora o 
princípio conhecido como “é-um” (is-a), segundo o qual uma subclasse deve 
representar uma especialização legítima da superclasse, ou seja, ser um tipo 
mais específico dentro de uma mesma hierarquia conceitual. No entanto, o 
uso excessivo ou inadequado desse mecanismo pode resultar em estruturas 
rígidas e de difícil manutenção. Por isso, autores como Sierra, Bates e Gee 
(2024) recomendam que a herança seja aplicada apenas quando houver uma 
relação semântica clara entre as classes envolvidas. Em situações nas quais 
essa relação não estiver bem definida, abordagens alternativas, como o uso 
de composição, podem oferecer maior flexibilidade e facilitar a evolução do 
sistema.
Na prática cotidiana, a herança contribui para organizar o código e facilitar 
a manutenção de sistemas, especialmente quando combinada com outro 
conceito fundamental da POO: o encapsulamento. Encapsular significa ocultar 
os detalhes internos de uma classe e expor apenas o que é necessário para 
seu uso externo, por meio de métodos específicos. Isso permite proteger 
os dados e garantir que as interações com o objeto sejam feitas de maneira 
controlada.
Em um sistema de gerenciamento de veículos, por exemplo, pode-se definir 
uma superclasse genérica chamada Veiculo, que agrupa atributos comuns 
como velocidade, marca e ano. A partir dela, subclasses como Carro, Moto 
e Caminhao podem ser criadas, herdando esses atributos e especializando 
comportamentos conforme necessário. O Caminhao, por exemplo, pode 
implementar um método específico como calcularCapacidadeDeCarga(). 
Essa organização hierárquica facilita a expansão do sistema, permitindo a 
introdução de novos tipos de veículos sem alterar a estrutura existente, ao 
mesmo tempo em que mantém os dados encapsulados e protegidos.
Java não permite herança múltipla de classes. Ou seja, uma subclasse 
só pode estender uma única superclasse. Deitel e Deitel (2010) jus-
tificam essa restrição como uma maneira de evitar ambiguidades relacionadas 
à origem de atributos ou métodos herdados quando múltiplas superclasses 
estiverem envolvidas. Apesar disso, Java permite herança múltipla de compor-
tamentos por meio de interfaces. Essa distinção mantém a linguagem simples, 
ao mesmo tempo em que oferece flexibilidade no projeto de sistemas. 
Sobrescrita4
Em síntese, a herança constitui um mecanismo essencial para estruturar 
sistemas orientados a objetos, favorecendo o reuso, a extensibilidade e a 
organização modular do código. A literatura especializada — incluindo Horst-
mann (2021), Deitel e Deitel (2010) e Bigonha (2021) — reforça sua relevância 
tanto teórica quanto prática no desenvolvimento em Java. Tendo compre-
endido como esse recurso opera e como ele fundamenta a construção de 
hierarquias de classes, avançaremos agora para a discussão da sobrescrita de 
métodos, que permite às subclasses redefinirem comportamentos herdados 
para atenderem às suas próprias necessidades e sustenta o polimorfismo 
em tempo de execução.
Sobrescrita em subclasses
A sobrescrita de métodos é um dos mecanismos centrais da POO e desempenha 
papel determinante no comportamento dinâmico dos sistemas desenvolvi-
dos em Java. Em síntese, a sobrescrita (ou method overriding) consiste na 
capacidade que uma subclasse possui de redefinir um método herdado da 
superclasse, fornecendo uma implementação mais específica para seu con-
texto. Como afirmam Deitel e Deitel (2010), esse recurso permite que objetos 
de subclasses respondam de maneira diferenciada às mesmas mensagens 
enviadas a um tipo mais geral, viabilizando o polimorfismo e reforçando o 
princípio de especialização dentro das hierarquias de classes.
Do ponto de vista técnico, a sobrescrita ocorre quando um método da 
subclasse tem a mesma assinatura que o método da superclasse. A assinatura 
de um método, segundo Horstmann (2021), é composta pelo nome do método 
e pela lista de parâmetros (quantidade, ordem e tipos). O tipo de retorno não 
faz parte da assinatura em Java para fins de sobrescrita — embora precise 
ser compatível com o elemento que o esteja solicitando. Por exemplo, se a 
superclasse Pessoa possui um método exibirDados(), uma subclasse como 
Aluno pode sobrescrevê-lo para incluir informações adicionais, desdeque 
mantenha exatamente a mesma assinatura. Esse alinhamento é essencial: caso 
o número ou o tipo dos parâmetros seja alterado, não ocorrerá sobrescrita, e 
sim sobrecarga de métodos (overloading), outro mecanismo da linguagem. Essa 
distinção costuma gerar confusões entre iniciantes, pois ambos os recursos 
envolvem métodos com nomes iguais, mas funcionam de forma diferente.
A distinção entre sobrecarga e sobrescritas é importante. A sobrecarga, 
como enfatizam Ascencio e Campos (2012), ocorre quando métodos com o 
mesmo nome coexistem dentro de uma mesma classe, desde que possuam 
assinaturas distintas. Trata-se de um recurso estático, resolvido em tempo de 
Sobrescrita 5
compilação, ao passo que a sobrescrita é um recurso dinâmico que depende 
da instância real do objeto em tempo de execução. Bigonha (2021) argumenta 
que essa diferença afeta diretamente o fluxo de chamada dos métodos, uma 
vez que o mecanismo de sobrescrita pressupõe uma resolução tardia (late 
binding), essencial para o polimorfismo. Por isso, métodos sobrescritos são 
escolhidos pelo tipo real do objeto — e não pelo tipo da referência que o 
aponta.
Anotação @Override
Em Java, a sobrescrita é reforçada pela anotação @Override. Deitel e Deitel 
(2010) destacam que essa anotação auxilia na detecção de erros em tempo 
de compilação, prevenindo situações em que o programador acredita estar 
sobrescrevendo um método, mas na verdade está criando outro, devido a 
diferenças sutis de assinatura. O compilador, ao identificar a anotação, verifica 
se o método realmente existe na superclasse. É, portanto, uma medida de 
segurança que melhora a qualidade do código.
A sobrescrita também está diretamente relacionada ao mecanismo de 
polimorfismo, o qual permite que um mesmo método produza comporta-
mentos diferentes dependendo da subclasse que o implementa. Horstmann 
(2021) explica que isso ocorre porque, ao chamar um método por meio de uma 
referência do tipo superclasse, Java verifica, em tempo de execução, qual é 
o tipo efetivo do objeto apontado, selecionando o método adequado. Essa 
dinâmica está representada no fluxo de execução interno da Java Virtual Ma-
chine (JVM), responsável por compilar e interpretar os códigos em linguagem 
de programação Java, que associa métodos específicos a objetos particulares, 
garantindo flexibilidade e adaptabilidade às aplicações.
A sobrescrita é especialmente útil quando se deseja adaptar ou espe-
cializar comportamentos herdados, adicionando detalhes ou ajustando 
funcionalidades às necessidades da subclasse. Por exemplo, considere uma 
superclasse ContaBancaria contendo um método calcularTarifa(). 
Uma subclasse ContaEstudantil pode sobrescrever o método para aplicar 
regras específicas, como isenções. Esse é um caso típico de especialização 
por sobrescrita, amplamente utilizado em sistemas de grande porte, como 
aplicações financeiras, educacionais e corporativas.
Apesar de suas vantagens, a sobrescrita exige cuidado no planejamento 
da hierarquia de classes. Sierra, Bates e Gee (2024) alertam que nem sempre 
a herança e a sobrescrita são as melhores escolhas, especialmente quando 
induzem a acoplamentos rígidos entre subclasses e superclasses. Em algumas 
Sobrescrita6
situações, pode ser mais adequado utilizar composição, interfaces ou padrões 
de projeto, como Strategy, para permitir variação de comportamento sem 
depender diretamente de heranças profundas.
Além disso, é importante compreender que métodos marcados como final 
não podem ser sobrescritos. Essa restrição, segundo Deitel e Deitel (2010), é 
justificada pela necessidade de evitar modificações indevidas em métodos cuja 
integridade é considerada essencial para o funcionamento correto da classe 
ou do framework. Do mesmo modo, classes definidas como final também 
podem ser estendidas. Um exemplo clássico é a classe String da linguagem 
Java. Por ser final, ela não permite que outras classes herdem dela, o que 
impede qualquer tipo de sobrescrita de seus métodos. Essa medida evita usos 
inadequados e garante a consistência do comportamento dessas classes em 
diferentes contextos do sistema.
A sobrescrita só ocorre quando toda a assinatura do método é 
idêntica à da superclasse. Se houver qualquer alteração na lista 
de parâmetros, mesmo que mínima, Java interpretará como sobrecarga, e não 
como sobrescrita. Essa é uma das causas mais frequentes de bugs em códigos 
escritos por iniciantes.
A sobrescrita de métodos constitui um dos mecanismos mais poderosos 
da POO, permitindo a adaptação e a especialização de comportamentos de 
forma segura e estruturada. Ao compreender sua relação com a assinatura 
do método, com o polimorfismo e com o processo de resolução dinâmica, o 
estudante passa a dominar um dos elementos centrais do desenvolvimento 
orientado a objetos em Java. Esse conhecimento é essencial para avançarmos à 
próxima seção, na qual construiremos um exemplo prático completo, aplicando 
herança e sobrescrita em um pequeno aplicativo funcional.
Exemplo prático
A compreensão dos conceitos de herança e sobrescrita se torna significativa-
mente mais clara quando aplicada a um caso concreto. Por essa razão, esta 
seção apresenta a construção passo a passo de um pequeno aplicativo em 
Java que utiliza uma hierarquia de classes e o mecanismo de sobrescrita de 
métodos. A prática de implementação, como ressaltam Deitel e Deitel (2010), 
Sobrescrita 7
é fundamental para consolidar o entendimento das estruturas de POO, pois 
permite observar como o comportamento dos objetos se altera em tempo de 
execução. Seguindo essa abordagem, desenvolveremos um exemplo simples, 
mas pedagógico, baseado em uma situação do cotidiano: um sistema que 
representa diferentes tipos de animais e seus sons característicos.
A escolha desse domínio se justifica por sua adequação didática. Como 
observa Horstmann (2021), exemplos com entidades do mundo real auxiliam 
na assimilação dos conceitos de herança e especialização, pois reproduzem 
relações naturais de generalização e particularização. Dessa forma, defini-
remos uma superclasse genérica Animal, da qual derivam as subclasses 
Cachorro e Gato. Cada subclasse sobrescreverá o método herdado emi-
tirSom(), implementando-o de acordo com seu comportamento específico. 
O propósito é demonstrar como a sobrescrita possibilita que objetos de tipos 
distintos respondam de forma diferente a uma mesma chamada de método, 
reforçando o entendimento do polimorfismo.
Antes de iniciar a análise detalhada do código, é importante destacar que, 
conforme discutido por Bigonha (2021), estruturas simples e bem modeladas 
facilitam a identificação das vantagens da modularidade orientada a objetos, 
sobretudo quando o foco recai sobre o reuso e a especialização estruturada 
do comportamento dos objetos. Portanto, o exemplo apresentado a seguir 
foi cuidadosamente elaborado para manter clareza, coesão e alinhamento 
com as boas práticas de projeto.
// Superclasse
class Animal {
 public void emitirSom() {
 System.out.println("O animal faz um som.");
 }
}
// Subclasse 1
class Cachorro extends Animal {
 @Override
 public void emitirSom() {
 System.out.println("O cachorro late: Au au!");
 }
}
Sobrescrita8
// Subclasse 2
class Gato extends Animal {
 @Override
 public void emitirSom() {
 System.out.println("O gato mia: Miau!");
 }
}
// Classe principal
public class TesteHeranca {
 public static void main(String[] args) {
 Animal a1 = new Animal();
 Animal a2 = new Cachorro();
 Animal a3 = new Gato();
 a1.emitirSom(); // Executa o método da superclasse
 a2.emitirSom(); // Executa o método sobrescrito 
em Cachorro
 a3.emitirSom(); // Executa o método sobrescrito 
em Gato
 }
}
Ao executar o programa, temos a seguinte saída no console:
 � O animal faz um som.
 � O cachorro late: Au au!
 � O gato mia: Miau!
O código do exemplo apresenta três classes organizadas em uma relação 
clara de herança. A classeAnimal atua como superclasse, fornecendo a im-
plementação padrão do método emitirSom(). As classes Cachorro e Gato 
utilizam a palavra-chave extends para estabelecer o vínculo de herança, 
herdando todos os métodos e atributos públicos da superclasse. Esse padrão 
segue o modelo apresentado por Horstmann (2021), que reforça a importância 
da herança como mecanismo de generalização e especialização no projeto 
de sistemas orientados a objetos.
A sobrescrita ocorre explicitamente nas subclasses Cachorro e Gato, 
que redefinem o método emitirSom() para refletir comportamentos mais 
específicos. É importante notar o uso da anotação @Override, que, conforme 
discutido por Deitel e Deitel (2010), auxilia o compilador na verificação da 
correta reescrita do método da superclasse, evitando erros comuns quando 
há discrepâncias na assinatura do método. Ao sobrescrever o método, cada 
Sobrescrita 9
subclasse passa a fornecer sua própria versão do comportamento herdado, 
demonstrando claramente o papel da especialização.
O método main() é responsável por testar o comportamento polimórfico 
do sistema. Três referências do tipo Animal são criadas, mas apenas a primeira 
aponta para um objeto efetivamente do tipo Animal. As demais apontam 
para objetos das subclasses Cachorro e Gato. Essa estratégia evidencia o 
princípio do polimorfismo: mesmo utilizando referências do tipo genérico 
(Animal), a JVM identifica, em tempo de execução, qual método deve ser 
invocado com base no tipo real do objeto, e não no tipo da referência. Bigonha 
(2021) destaca que essa capacidade de alteração dinâmica do comportamento 
é uma das características mais poderosas e flexíveis da orientação a objetos.
O resultado confirma o funcionamento da sobrescrita: embora as refe-
rências sejam todas do tipo Animal, os métodos executados são aqueles 
definidos nas subclasses. Esse comportamento demonstrado na Figura 2 
exemplifica perfeitamente o conceito de despacho dinâmico, apresentado por 
Horstmann (2021), que descreve como a JVM seleciona o método apropriado 
com base no tipo do objeto instanciado. Dessa forma, o exemplo reforça a 
importância da combinação entre herança e sobrescrita para a construção 
de sistemas flexíveis e capazes de lidar com múltiplas especializações sem 
necessidade de condicionais extensas ou duplicação de código. 
Figura 2. Diagrama UML representando a hierarquia Animal → Cachorro/Gato e a 
sobrescrita de métodos.
Fonte: próprio autor.
Sobrescrita10
Com este exemplo prático, fica evidente como a herança e a sobrescrita 
se articulam para promover a reutilização de código, a especialização de 
comportamentos e a implementação do polimorfismo em Java. A clareza na 
definição das classes, a compatibilidade das assinaturas e o uso consciente 
do despacho dinâmico tornam o desenvolvimento orientado a objetos mais 
robusto e expressivo.
Neste capítulo, aprofundamos os fundamentos da POO, destacando a 
herança como mecanismo essencial para o reuso e a organização modular 
do código, e a sobrescrita de métodos como ferramenta central para es-
pecialização e polimorfismo. Exploramos desde os conceitos teóricos até 
a implementação prática em Java, evidenciando como a correta aplicação 
desses recursos permite construir sistemas flexíveis, extensíveis e alinhados 
às necessidades reais do desenvolvimento de software. Ao dominar herança 
e sobrescrita, o estudante está preparado para enfrentar desafios de mo-
delagem, manutenção e evolução de aplicações, consolidando uma base 
sólida para avançar em temas mais complexos da engenharia de software 
orientada a objetos.
Referências 
ASCENCIO, A. F. G.; CAMPOS, E. A. V. Fundamentos da programação de computadores: 
algoritmos, Pascal, C/C++ e Java. 3. ed. São Paulo: Pearson Education do Brasil, 2012.
BIGONHA, R. S. Programação modular: a linguagem Java (SE 14). Belo Horizonte: Ed. 
do Autor, 2021.
DEITEL, P.; DEITEL, H. Java: como programar. 8. ed. São Paulo: Pearson Prentice Hall, 2010.
HORSTMANN, C. S. Core Java: fundamentals. 12. ed. Boston: Pearson Education, 2021. v. 1.
SIERRA, K.; BATES, B.; GEE, T. Use a cabeça Java: guia do aprendiz para programação no 
mundo real. 3. ed. Rio de Janeiro: Alta Books, 2024. E-book.
Leituras recomendadas
BLOCH, J. Effective Java. 3. ed. Boston: Addison-Wesley, 2018. 
FREEMAN, E.; ROBSON, E. Head first design patterns. 2. ed. Boston: O’Reilly Media, 2021. 
Sobrescrita 11
 
Dica do Professor
A implementação da sobrescrita de método na POO exige a definição prévia de herança e classes, 
incluindo a superclasse e suas subclasses. Com a sobrescrita é possível alterar o comportamento 
das subclasses e criar novos códigos com base no código-base do programa.
Nesta Dica do Professor, é possível aprender a como implementar a sobrescrita de método em 
Java, utilizando os recursos e componentes da linguagem para conduzir esse processo. 
Compreender como realizar a sobrescrita é fundamental para a construção de programas mais 
flexíveis e eficientes, que possam ser facilmente adaptados e estendidos de acordo com as 
necessidades específicas de cada projeto. A sobrescrita de método é uma das principais técnicas 
em POO e pode ser aplicada em diferentes linguagens de programação.
As imagens do vídeo a seguir possuem audiodescrição. Para acessar o recurso, 
clique aqui 
 
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
https://creator-files.plataforma.grupoa.education/undefined/9113_Audiodescricao_Dica_Professor-2026-04-22T10:51:43-03:00.pdf
https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/44220c08faa3d316b15a83e6f2e020fa
Exercícios
1) A sobrescrita permite aplicar a modelagem sobre diagramas de classes e suas definições. 
Além disso, pode ser elaborada considerando a declaração de nome de uma classe com uma 
ou mais subclasses atribuídas a si.
Um método pode ser sobrescrito apenas quando:
A) tem o modificador de acesso private.
B) tem o mesmo nome da classe à qual pertence.
C) é um construtor.
D) é acessível.
E) tem o mesmo tipo de retorno.
2) Em alguns casos, existe a necessidade de herdar habilidades em Java, porém é necessário 
garantir a possibilidade e personalizá-las. A herança deve considerar a mudança de 
comportamento entre as classes.
Nesse contexto, ao sobrescrever um método adotado pela linguagem de programação Java 
e outras orientadas a objeto, é necessário considerar que o ato praticado será:
A) substituir a implementação do método da superclasse.
B) escrever um método herdado com o mesmo tipo de retorno, mas com nome diferente.
C) atribuir assinaturas diferentes; todavia, a implementação deve ser igual.
D) garantir que as assinaturas e as implementações sejam diferentes daquelas na superclasse.
E) escrever o método com mesmo nome, modificando apenas seus parâmetros.
3) Métodos representam uma parte essencial na POO, utilizados para que seja possível 
consultar e alterar atributos elencados aos objetos.
Sobre as características de um método na sobrescrita, é correto afirmar que:
A) os métodos que sobrescrevem não têm especificadores de acesso.
B) uma subclasse não pode alterar o acesso aos métodos da superclasse.
C) um método declarado como protected na superclasse pode ser declarado public na subclasse.
D) um método declarado como protected na superclasse pode ser declarado private na subclasse.
E) o método que sobrescreve não pode ser final.
4) Em Java, implementar classes é possível por meio de palavras-chaves. Para definir classes 
públicas, é necessário declarar a classe por meio do comando public class; já para modificar o 
acesso do método utiliza-se public void.
Considerando as informações repassadas, analise o código a seguir:
public class Animal{ 
public void locomover(){ 
System.out.println("Se locomove"); 
} 
}
public class Peixe extendas Animal { 
public void locomover(){ 
System.out.println("Nada"); 
} 
}
 
Ao analisar o código, está correto afirmar que:
A) a classe Animalé uma subclasse de Peixe.
B) a classe Peixe é uma classe genérica.
C) ao instanciar a classe Peixe e, por meio de uma variável de referência, chamar o método 
locomover(), a saída que se tem é: Se locomove.
D) ao instanciar a classe Peixe e, por meio de uma variável de referência, chamar o método 
locomover(), a saída que se tem é: Nada.
E) o método locomover(), herdado pela subclasse Animal, foi sobrescrito, pois sua assinatura e 
seu comportamento foram alterados.
5) A sobrescrita utiliza um conjunto de modificadores para definir o conceito de herança.
Em relação à herança e à sobrescrita, é correto afirmar que:
A) a sobrescrita de métodos permite estender um código existente.
B) um método pode ser sobrescrito somente se for acessível.
C) o método da subclasse não sobrescreve o método private da superclasse.
D) invocações de métodos private sempre invocam a implementação do método declarado na 
classe atual.
E) uma invocação externa do método da subclasse, acessível fora de sua classe, resulta na 
invocação da implementação da superclasse.
Na prática
A partir da sobrescrita, é possível especializar os métodos e a forma como eles são herdados entre 
as classes, alternando o comportamento dos elementos de um código. O método sobrescrito 
basicamente fornece uma nova versão de determinada propriedade considerando as características 
da classe-pai, praticando a herança, mantendo a assinatura e garantindo o vínculo entre elas.
Neste Na Prática, você vai ver um exemplo que ilustra como a sobrescrita é utilizada na POO para 
resolver problemas e desenvolver soluções mais flexíveis e adaptáveis.
A imagem a seguir possui audiodescrição.
Aponte a câmera para o 
código e acesse o link do 
conteúdo ou clique no 
código para acessar.
https://statics-marketplace.plataforma.grupoa.education/sagah/706caed0-5fc4-4f4c-8814-a0dc7ddbb058/03695d30-643f-410d-bd62-94064f86672d.png
Saiba mais
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor:
Sobrecarga e sobreposição de métodos em orientação a objetos
Veja, neste vídeo, como funcionam a sobrecarga e a sobreposição de métodos em orientação a 
objetos e como esses dois conceitos podem ajudar você na hora de programar.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Definições e termos de Java e orientação a objetos
Neste artigo, você pode revisar os principais contextos e termos utilizados na POO e na linguagem 
Java. Você vai ver conceitos sobre sobrescrita, assinatura, classes e métodos, além de códigos que 
aplicam os conceitos na prática.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Polimorfismo com sobrescrita
Acompanhe no Capítulo 8, Polimorfismo e coerções (p. 302), da obra a seguir. Você pode 
aprofundar seus conhecimentos sobre o uso do polimorfismo, incluindo a sobrescrita e tipo objeto 
versus tipo referência.
Conteúdo interativo disponível na plataforma de ensino!
https://www.youtube.com/embed/BIB3lbzHWcQ
https://guilherme-manzano.medium.com/defini%C3%A7%C3%B5es-e-termos-de-java-e-orienta%C3%A7%C3%A3o-a-objetos-2d14832acce5

Mais conteúdos dessa disciplina