Escolar Documentos
Profissional Documentos
Cultura Documentos
Artigo
Encapsulamento,
Polimorfismo, Herança em
Java
Veja neste artigo como funciona o Encapsulamento, Polimorfismo e
Herança em Java de uma maneira clara, simples e fácil de entender.
Artigos
Java
se faz necessário o entendimento de alguns conceitos iniciais para que tudo possa
ficar claro à medida que a aula for dando andamento.
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 2/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
qualquer classe que quiser ser do tipo definido pela interface deve implementar
os métodos dessa interface. A interface não contém nenhum código de
implementação, apenas assinaturas de métodos e/ou atributos que devem ter seu
código implementado nas classes que implementarem essa interface. A Interface
define um padrão para especificação do comportamento de classes. Porém, os
métodos de uma interface são implementados de maneira particular a cada
classe; ou seja, permitem expressar comportamento sem se preocupar com a
implementação. Uma interface não possui atributos. Uma classe pode
implementar várias interfaces, mas pode ter apenas uma superclasse.
1 public class TV {
2 private int tamanho;
3 private int canal;
4 private int volume;
5 private boolean ligada;
6 public TV(int tamanho) {
7 this.tamanho = tamanho;
8 this.canal = 0;
9 this.volume = 0;
10 this.ligada = false;
11 }
12 // abaixo vem todos os métodos construtores get e set...
13 // Encapsulamento
14 }
15
16 public interface ControleRemoto {
17 void mudarCanal(int canal);
18 void aumentarVolume (int taxa);
19 void diminuirVolume (int taxa);
20 boolean ligar();
21 boolean desligar();
22 }
Agora temos nossa interface e a definição do que é a TV, vamos desenvolver duas
TVs diferentes, imaginando que fossem duas marcas completamente distintas e
que uma não tem nenhuma relação com a outra. Como ambas as TVs irão
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 3/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
A TV modelo 001 é uma TV simples, sem muitos recursos que quando acionarmos
o comando desligar irá simplesmente desligar.
11
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 4/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
11
}
12
13
public void ligar() {
14
super.setLigada(true);
15
}
16
17
public void aumentarVolume(int taxa) { }
18
public void diminuirVolume(int taxa) { }
19
public void mudarCanal(int canal) { }
20
}
Como pode ser visto, ambos possuem a mesma ação que é desligar, porém cada
um executa de forma diferente.
Uma classe abstrata nada mais é do que uma especificação conceitual para outras
classes. Isso que dizer que nunca iremos instanciá-la. Ela apenas fornece um
modelo para geração de outras classes. Esta nunca está completa, ou seja, servirá
apenas para criação de funcionalidades genéricas de casses filhas. Podemos
também chamar as classes abstratas de super classe. Por exemplo, é64sabido
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 5/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
30 super();
31 }
32 public Juridica(String nome){
33 super(nome);
34 }
35 public String getCNPJ(){
36 return xCNPJ;
37 }
38 public String getNome(){
39 return super.getNome();
40 }
41 }
42
43 class Principal{
44 public static void main(String[] args){
45 Fisica pessoa1 = new Fisica("Daniel");
46 System.out.println (pessoa1.getNome());
47 System.out.println (pessoa1.getCPF());
48 Juridica pessoa2 = new Juridica();
49 System.out.println (pessoa2.getNome());
50 System.out.println (pessoa2.getCNPJ());
51 }
52 }
Para utilizar estes modificadores de acesso, basta que o escreva antes do nome do
atributo, método ou classe.
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 7/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Exemplo:
Por padrão, a linguagem Java permite acesso aos membros apenas ao pacote em
que ele se encontra. De forma ilustrativa, abaixo está uma tabela demonstrando
todas estas características.
Devmedia
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 8/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Encapsulamento
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 9/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
acesso mais restritivo, private, que faça sentido para um membro particular.
Sempre usamos private, a menos que tenhamos um bom motivo para deixá-lo
com outro nível de acesso. Não devemos permitir o acesso público aos membros,
exceto em caso de ser constantes. Isso porque membros públicos tendem a nos
ligar a uma implementação em particular e limita a nossa flexibilidade em mudar
o código. O encapsulamento que é dividido em dois níveis:
Exemplo:
Exemplo:
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 10/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Herança
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 11/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 12/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
classes, podendo criar tantos subtipos quanto necessário, até se chegar ao nível de
especialização desejado. Podemos tratar subtipos como se fossem seus
supertipos, por exemplo, o sistema de RH pode tratar uma instância de
Presidente como se fosse um objeto do tipo Funcionário, em determinada
funcionalidade. Porém não é possível tratar um supertipo como se fosse um
subtipo, a não ser que o objeto em questão seja realmente do subtipo desejado e a
linguagem suporte este tipo de tratamento, seja por meio de conversão de tipos
ou outro mecanismo. Algumas linguagens de programação permitem herança
múltipla, ou seja, uma classe pode estender características de várias classes ao
mesmo tempo. É o caso do C++. Outras linguagens não permitem herança
múltipla, por se tratar de algo perigo se não usada corretamente. É o caso do Java.
Na Orientação a Objetos as palavras classe base, supertipo, superclasse, classe pai
e classe mãe são sinônimos, bem como as palavras classe derivada, subtipo,
subclasse e classe filha também são sinônimos.
É aqui que a herança se torna uma ferramenta de grande utilidade. Podemos criar
uma classe Pessoa, que possui todos os atributos e métodos comuns a todas as
pessoas e herdar estes atributos e métodos em classes mais específicas, ou seja, a
herança parte do geral para o mais específico. Comece criando uma classe
Pessoa, Pessoa.java, como mostrado no código a seguir:
Esta classe possui os atributos nome e idade. Estes atributos são comuns a todas
as pessoas. Veja agora como podemos criar uma classe Aluno que herda estes
atributos da classe Pessoa e inclui seu próprio atributo, a saber, seu número de
matrícula. Eis o código:
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 14/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
44 System.out.println("Automovel.adjust");
45 }
46
47 public void cleanup() {
48 System.out.println("Automovel.cleanup");
49 }
50 }
51
52 class Bicicleta extends Veiculo {
53 public Bicicleta() {
54 System.out.println("Bicicleta");
55 }
56
57 public void checkList() {
58 System.out.println("Bicicleta.checkList");
59 }
60
61 public void adjust() {
62 System.out.println("Bicicleta.adjust");
63 }
64
65 public void cleanup() {
66 System.out.println("Bicicleta.cleanup");
67 }
68 }
Polimorfismo
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 16/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da
classe derivada, é tomada em tempo de execução, através do mecanismo de
ligação tardia. A ligação tardia ocorre quando o método a ser invocado é definido
durante a execução do programa. Através do mecanismo de sobrecarga, dois
métodos de uma classe podem ter o mesmo nome, desde que suas assinaturas
sejam diferentes, entretanto isso não é polimorfismo. Como dito anteriormente,
tal situação não gera conflito, pois o compilador é capaz de detectar qual método
deve ser escolhido a partir da análise dos tipos dos argumentos do método. Nesse
caso, diz-se que ocorre a ligação prematura para o método correto. Em Java, todas
as determinações de métodos a executar ocorrem através de ligação tardia exceto
em dois casos: 64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 17/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
1. Métodos declarados como final não podem ser redefinidos e, portanto não
são passíveis de invocação polimórfica da parte de seus descendentes; e
2. Métodos declarados como private são implicitamente finais.
Exemplo:
class Aplicativo {
64
public static void main(String args[]){
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 18/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
19 System.out.println("Polimorfismo\n");
20 Mamifero mamifero1 = new Elefante();
21 System.out.println("Cota diaria de leite do elefante: " + mamife
22 Mamifero mamifero2 = new Rato();
23 System.out.println("Cota diaria de leite do rato: " + mamifero2.
24 }
25 }
Links Úteis
Lógica de Programação:
Neste curso veremos uma introdução a algoritmos, utilizando como linguagem de apoio o Portugol.
Conheça metodologias e ferramentas como Scrum, XP, PMBOK, UML e muito mais.
mercado. Domine a linguagem SQL e os principais SGBDs: SQL Server, Oracle, MySQL e outros.
O Que é JPA?:
Dominar a persistência de dados é uma necessidade indispensável aos programadores. Sem esse conhecimento
nossas aplicações não terão a capacidade de armazenar e recuperar os dados por ela manipulados.
World!”. :) Para isso, vamos começar ensinando como instalar o Java e preparar o ambiente de desenvolvimento.
Tecnologias:
Java POO
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 19/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
ÚLTIMA SEMANA!
Plano Recorrente
BLACK FRIDAY
R$89,90 /MÊS
PRIMEIROS
364MESES
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 20/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Matricule-se
APROVEITE
Perguntas Frequentes
Quem somos?
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 21/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Leonardo Carlos
Lucas Rodrigues
Estudo aqui na Dev desde o meio do ano passado! Nesse período a Dev me
ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha empresa. Hoje eu
lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um Full-Stack Dev!
Heráclito Júnior 64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 22/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Julio Cablen
Joelberth Sena
Felipe Nunes
Wanderson Oliveira
José Lucas
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 23/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Eduardo Dorneles
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou
aprendendo muito, muito obrigado por existirem. Estão de parabéns...
Espero um dia conseguir um emprego na área.
Por Hailton
Em 2009
COMENTÁRIOS
Rodolfo Andrade
Nível 61
Olá, nos exemplos de código das TVs, acredito que o método construtor da
classe ModeloX deva também ter o nome ModeloX, mas está sendo
declarado como ModeloSDX. Observei que no código que testa e instancia
as classes, está sendo instanciado um objeto do tipo ModeloSDX mas
chamando um construtor chamado ModeloX. Fiquei confuso. O método
construtor não deveria ter o mesmo nome da classe? Caso positivo, será
preciso também ajustar o código da classe ExemploInterfaceamento.
há +1 ano
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 24/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Marcio Souza
DevMedia
Oi Rodolfo.
Vou entrar em contado com o editor para que faça as devidas alterações.
Diogo
Nível 0
Olá,
o texto diz que Interface é "..um bloco de código definindo um tipo e os
métodos e atributos que esse tipo deve possuir"
Obrigado.
há +1 ano
Marcio Souza
DevMedia
Oi Diogo.
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 25/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
Mas se atributo estiver sendo usado apenas para indicar uma variável, sim,
uma interface pode conter variáveis. Entretanto, essas variáveis serão
tratadas como constantes. Variáveis constantes no Java são estativas e
finais, por isso, precisam de uma valor inicial declarado que nunca mudara,
justamente pela variável ser final.
void mensagem();
@Override
System.out.print(texto);
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 26/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
há +1 ano
Andressa Silva
Nível
Adorei
Me ajudou muito
Obrigada!
há +1 ano
Douglas
Nível 0
Opa Andressa,
Que bom! :)
Um abraço.
há +1 ano
Menu
Assine agora Hospedagem web por Porta 80 Web Hosting.
Quem Somos
Fale conosco
Plano para Instituição de ensino
Assinatura para empresas
Tecnologia: 64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 27/28
24/11/2023, 01:27 Encapsulamento, Polimorfismo, Herança em Java
HTML - CSS - Algoritmo - Javascript - React - React Native - Node.js - SQL - MySQL - UML - Scrum -
Levantamento de Requisitos - Padrão de Projeto - Teste de Software
Cursos:
HTML e CSS - Javascript - Programação para Iniciantes - Angular - React - Vue.js - Node.js - Spring - .NET
Core - Mobile - React Native - Android - Flutter - Algoritmo - Automação - Delphi - Java - PHP - Python -
SQL e Banco de Dados - Engenharia de Software - Canal Mais - Gratuitos
Artigos:
Front-End - Javascript - Iniciantes - Angular - Dart - Engenharia - Mobile - Node.js - Python - React
Native - Vue.js - Android - Banco de Dados - Delphi - Flutter - Java - Kotlin - .Net - PHP - React - Spring -
Gratuitos
DevCast:
HTML e CSS - Javascript - Angular - Engenharia - Mobile - Node.js - Python - React Native - Android -
Banco de Dados - Delphi - Flutter - Java - Automação - .Net - PHP - React - Spring - Gratuitos - Canal
Mais
Guia:
Fundamentos - .NET - PHP - Python - Java - Delphi - HTML e CSS - JavaScript - Node - React Native -
Flutter - Banco de Dados - Mobile - Spring - Arquitetura - Automação - Engenharia - + Assuntos
64
https://www.devmedia.com.br/encapsulamento-polimorfismo-heranca-em-java/12991 28/28