Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

Prévia do material em texto

Classes abstratas e interfaces
APRESENTAÇÃO
As classes abstratas e as interfaces são responsáveis por fazer abstrações, em outras palavras, 
elas realizam implementação interna de recursos e mostram apenas a funcionalidade aos 
usuários. Ambas trabalham com o conceito de abstração, no entanto, elas têm suas diferenças. 
Em Java, a principal diferença entre elas é que os métodos de uma interface Java são 
implicitamente abstratos e não podem ter implementações; já uma classe abstrata Java pode ter 
métodos de instância que implementam um comportamento padrão. 
As classes abstratas podem ter métodos abstratos e não abstratos, diferentemente da interface 
que contém apenas métodos abstratos. 
Os métodos abstratos são métodos com assinatura válida, no entanto, eles devem ser 
sobrescritos e implementados na classe concreta que estende a classe abstrata.
Nesta Unidade de aprendizagem, você aprenderá as definições de classes e de métodos 
abstratos em orientação a objetos, analisar 
o uso de interfaces, além de aprender como criar uma aplicação utilizando interfaces e classes 
abstratas.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Identificar o que são classe abstrata e método abstrato.•
Analisar casos de utilização de herança e de implementação de interface.•
Construir uma aplicação usando classes abstratas e interfaces.•
DESAFIO
Sistemas computacionais que exigem reaproveitamento de código, geralmente, são projetados 
para facilitar a sua manutenção. Para isso, 
é utilizado, com muita frequência, o conceito de herança e polimorfismo. Atrelados ao uso 
desses conceitos, podem ser utilizadas classes genéricas que nunca serão instanciadas 
(abstratas), ou até mesmo 
a implementação de métodos alheios a contratos (interface).
Você, como programador de linguagem Java, é convidado para desenvolver um sistema para 
uma banca de jornal, cujo proprietário deseja expandir seus negócios para o meio digital. Ele 
quer algo simples, uma vez que o negócio recém foi estabelecido. A banca tem apenas livros 
(que pode ser classe abstrata) e revistas, os quais implementam 
o produto dessa banca. O produto será adicionado como interface para que livros e revistam 
tenham, futuramente, um sistema de desconto. 
Os livros por sua vez, podem ser ampliados para livro físico, e-book 
e minilivro.
Assim, escreva o código de implementação para esse novo sistema.
Para ajudar você em sua programação e guiá-lo no seu passo inicial, 
veja a modelagem em UML. 
 
INFOGRÁFICO
Uma classe abstrata permite criar funcionalidades que as subclasses podem implementar ou 
substituir, enquanto uma interface permite apenas indicar a funcionalidade, mas não 
implementá-la. Uma classe pode estender apenas uma classe abstrata, enquanto uma classe pode 
implementar várias interfaces.
No Infográfico a seguir, conheça as principais diferenças entre classes abstratas e interfaces.
CONTEÚDO DO LIVRO
Em se tratando de reaproveitamento de código e de delegação de ações, métodos abstratos e 
interfaces podem parecer semelhantes em seus comportamentos, contudo, cada um carrega 
consigo sua particularidade, considerando sempre o contexto e sua aplicabilidade.
Na obra Programação orientada a objetos, base teórica desta Unidade de Aprendizagem, leia o 
capítulo Classes abstratas e interfaces, no qual você irá ver conceitos e aplicações dessas duas 
características enraizadas na linguagem de programação Java, podendo, ao final, diferenciar 
uma da outra.
Boa leitura.
PROGRAMAÇÃO 
ORIENTADA A 
OBJETOS
Rafael Albuquerque
Classes abstratas 
e interfaces
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
  Identificar o que é classe abstrata e método abstrato.
  Analisar casos de utilização de herança e de implementação de 
interface.
  Construir uma aplicação usando classes abstratas e interfaces.
Introdução
Dentro do paradigma de programação orientada a objetos, classes abs-
tratas e interfaces são dois conceitos importantes, pois são responsáveis 
por determinar comportamentos. Apesar de ambas trabalharem com o 
conceito de abstração, elas possuem suas particularidades. A principal 
diferença entre elas é que os métodos de uma interface Java são impli-
citamente abstratos, não podendo conter implementação de métodos 
em sua classe. Já uma classe abstrata em Java pode ter métodos com sua 
codificação, que implementam um comportamento padrão.
Além dos conceitos de classes abstratas e interfaces, existe o con-
ceito de métodos abstratos, que podem ser utilizados em interfaces e 
em classes abstratas, uma vez que um método abstrato possui apenas 
a assinatura e sua implementação é realizada apenas nas classes que 
implementem a classe abstrata ou a interface. No entanto, as classes 
abstratas podem ter tanto os métodos abstratos quanto os não abstratos, 
diferentemente da interface, que pode possuir apenas métodos abstratos.
Neste capítulo, você estudará sobre os conceitos de classes e mé-
todos abstratos. Além disso, verá quando utilizar os conceitos de he-
rança ou interface. Por fim, verá um exemplo de aplicação prática da 
implantação de classes abstratas e interfaces, utilizando a linguagem 
de programação Java.
1 Classes e métodos abstratos
Na programação orientada a objetos, existe o conceito de classes, que ge-
ralmente têm referência a alguma abstração do mundo real, como pessoas, 
automóveis, animais. Por meio desse paradigma, é possível criar esse tipo de 
representação. Em relação à herança, existem as superclasses e as subclasses, 
bem como dois outros modos de classifi cação, denominados classes abstratas 
e classes concretas (CARVALHO, 2016).
Uma classe concreta é uma classe comum que pode ser instanciada, ao 
contrário de uma classe abstrata, que não pode ser instanciada, devendo 
ser estendida. Em geral, uma classe abstrata pode conter métodos abstratos, 
ou métodos que não são implementados. Esses métodos possuem assinatura 
válida, porém devem ser sobrescritos e implementados na classe concreta que 
estende a classe abstrata (FINEGAN; LIGUORI, 2018). As classes abstratas 
podem estender outras classes abstratas sem implementar seus métodos, além 
de ter variáveis de instância, as quais podem ser usadas pelas classes concretas 
que as estendem. 
As classes abstratas são criadas para representar, de forma genérica, uma 
família de classes, ou seja, elas servem de molde para outras classes. Assim 
como as classes, os métodos contidos nelas podem ser concretos — possuem 
implementação ou são abstratos — contendo apenas sua declaração, que possui 
apenas as definições de sua assinatura.
Por exemplo, considere as formas geométricas triângulo, quadrado e 
círculo, que fazem parte de uma família de objetos, a qual pode ser chamada 
de FormaGeometrica. Toda forma geométrica pode ser representada 
graficamente e pode ter sua área e seu perímetro calculados a partir de suas 
medidas. No entanto, cada uma delas possui suas próprias fórmulas para os 
cálculos de perímetro e área. Dessa forma, as formas geométricas podem 
utilizar o método desenhar, herdado da superclasse FormaGeometrica, 
mas devem fornecer soluções próprias para os cálculos de área e perímetro. 
A Figura 1, a seguir, apresenta a implementação da classe abstrata For-
maGeometrica, que contém dois métodos abstratos, calcularArea e 
calculaPerimetro.
Classes abstratas e interfaces2
Figura 1. Código Java da classe abstrata FormaGeometrica. 
Fonte: Machado, Franco e Bertagnolli. (2016, p. 22). 
A Figura 2, a seguir, apresenta a classe concreta Quadrado, que estende 
a classe abstrata FormaGeometrica. Os métodos abstratos da classe foram 
sobrescritos e implementados na classe Quadrado, e esse mesmo procedi-
mento deve ser realizado para as demais classes que representam outras formas 
geométricas, com, por exemplo, um triângulo, ou um círculo entre outras 
formas geométricas, pois cada forma geométricatem sua própria fórmula 
para calcular área e perímetro. 
Figura 2. Código Java da classe Quadrado, definida como uma especialização de 
FormaGeometrica.
Fonte: Machado, Franco e Bertagnolli (2016, p. 22).
3Classes abstratas e interfaces
Se você declarar um método abstrato, precisará tornar a classe abstrata também, visto 
que não é possível ter métodos abstratos em uma classe que não é abstrata. Além disso, 
toda classe-filha (subclasse) precisa implementar os métodos abstratos da classe-pai 
(superclasse), a não ser que ela também seja abstrata.
2 Utilização de heranças e interfaces
Na orientação a objetos, em algumas situações, é útil defi nir o que uma classe 
deve fazer, porém não se deve determinar como ela o fará. Conforme Schildt 
(2014), ao contrário de métodos abstratos, em que método defi ne uma assinatura 
com seu comportamento-padrão implementado, as interfaces não defi nem a 
implementação. Em Java, pode-se separar a interface de uma classe de sua 
implementação usando a palavra-chave interface.
Uma interface se assemelha a uma classe abstrata, por não possuir nenhum 
conteúdo dentro da declaração de suas ações/funções. Logo, uma subclasse 
de uma interface deve implementar o corpo, estabelecendo, assim, seus com-
portamentos. Portanto, pode-se chegar à seguinte conclusão: uma interface 
especifica o que deve ser feito, mas não como deve ser feito. Após a definição 
de uma interface, inúmeras classes podem implementá-la, e uma classe pode 
implementar qualquer número de interfaces.
Usando herança e implementação de interfaces
No caso de utilização de classes por meio de herança, pode-se defi nir uma 
classe de maneira especializada. Logo, as subclasses herdam os atributos e 
as operações das superclasses. Assim, conforme apresentado na Figura 3, a 
classe Carnivoro possuirá o atributo peso e as operações comer e reproduzir, 
além daqueles que são específi cos da própria subclasse.
Classes abstratas e interfaces4
Figura 3. Hierarquia de classes. 
Fonte: Machado, Franco e Bertagnolli (2016, p. 18). 
Utilizando herança, existem casos em que uma classe-filha precisa utilizar 
algum método da classe-mãe, porém com algumas características distintas. 
Nesse caso, será preciso sobrecarregar o método. O exemplo da Figura 4 aborda 
exatamente esse conceito. Observe que, para esse exemplo, existe uma chamada 
na classe LampadaNatal para a função acender. Mas por que há essa chamada, 
se na classe-mãe Lampada já existe uma função com o mesmo nome? Para esse 
caso, é realizada outra ação para o mesmo comportamento de acender, porém 
com dois argumentos, indicando os tempos de pisca e a duração da iluminação.
5Classes abstratas e interfaces
Figura 4. Sobrecarga de métodos em herança. 
Fonte: Adaptada de Machado, Franco e Bertagnolli (2016). 
A Figura 5, a seguir, apresenta todas as chamadas da classe. Observe que 
são feitas duas chamadas à função acender(). A primeira chamada refere-
-se à ação realizada na classe superior, que contém apenas duas ações em seu 
corpo — ativa o atributo TestaLigada e chama a função iluminar(), 
por não conter nenhum argumento. Já na segunda chamada, são passados 
como argumento dois valores, e a função acender()está localizada na 
subclasse LampadaNatal. 
Figura 5. Exemplo de uso dos métodos herdados e do método sobreposto.
Fonte: Machado, Franco e Bertagnolli (2016, p. 19). 
Um dos inconvenientes em se utilizar classes como herança em Java, mesmo 
que a classe superior seja concreta ou abstrata, é a não permissão de heranças 
Classes abstratas e interfaces6
múltiplas. Ou seja, uma classe Veículo nunca poderá ser uma moto ou um 
carro ao mesmo tempo.
Uma maneira de contornar essa situação é por meio do recurso de interface. 
Segundo Machado, Franco e Bertagnolli (2016), interface é a definição de um 
contrato, ou seja, seus métodos devem, necessariamente, ser implementados. Uma 
vez que uma classe implemente essa interface, essa implementação é realizada 
por meio da sintaxe implements em Java. Apenas as assinaturas dos métodos 
estão disponíveis, deixando para a classe que o implemento deve prover o com-
portamento ou ação necessária. Por padrão, todos os métodos devem ser públicos 
e abstratos — logo, em sua declaração, nenhuma implementação é permitida. 
Uma boa maneira de analisar o funcionamento de uma interface, além do 
método da prática em si, é por meio da linguagem de modelagem unificada 
(UML). No exemplo da Figura 6, a interface Forca representa uma família 
de classes (tanto Motor quanto Turbina estão associadas por uma agre-
gação a um tipo de Forca) e permite que o veículo tenha o seu núcleo de 
força alterado (como potência, empuxo, nível de ruído) sem a necessidade de 
alterações na classe Carro.
Figura 6. Representação do uso de interfaces por diagramação de classes.
Fonte: Adaptado de Machado, Franco e Bertagnolli (2016).
Levando em consideração que existe uma implementação da interface 
Forca pelas classes de Motor e Turbina, e não uma extensão, isso permite 
7Classes abstratas e interfaces
que outras interfaces sejam adicionadas ao sistema, como, por exemplo, a 
interface Direcao, que pode ser implementada para classes como Manual, 
SemiAutomática, Automatica, ou até mesmo, em um futuro não tão 
distante, Autonoma, em que cada tipo de direção possui uma forma de ope-
ração diferente. Ainda com base nesse exemplo, a implementação da UML 
da Figura 6 pode ser acompanhada na Figura 7.
Figura 7. Codificação da UML apresentada.
Fonte: Adaptado de Machado, Franco e Bertagnolli (2016). 
Observe que o carro aceita como novo núcleo qualquer classe que realize a 
implementação da interface Forca. Assim, se, no futuro, os carros forem movidos 
por um novo tipo de moto, como um reator, basta criar: public class Reator 
implements Forca. 
Embora as interfaces sejam utilizadas para criar situações de herança múltipla, essa 
não é a sua finalidade. Essa função é dada a classes abstratas, que conseguem criar 
uma hierarquia de classes e de subtipos. Contudo, não é considerado um erro utilizar 
interfaces para simular uma herança.
Classes abstratas e interfaces8
3 Aplicação com classes abstratas e interfaces
Para o exemplo dado anteriormente, ilustrado pela UML da Figura 6, acrescenta-
remos novos tipos de transportes, como Carro e Motocicleta, com o intuito 
de apresentar o uso das características de classes abstratas aliadas a interfaces. 
Para tanto, adicionaremos a esse contexto uma classe genérica para representar 
esses meios de transportes, denominada Veículo, que será responsável por 
comportamentos comuns, como determinar a forca, ligar e desligar.
Na Figura 8, a seguir, é possível acompanhar a implementação da classe-
-mãe. Observe que, embora a classe esteja em modo abstrato, é possível de-
terminar o seu comportamento sem fazer com que ela se estenda ou tenha 
que, necessariamente, assinar um contrato, como é feito nas implementações 
de interface. Além disso, atributos comuns, como ano e placa, assim como 
métodos comuns de ligar e desligar, ficarão por conta dessa classe genérica.
Figura 8. Classe abstrata Veículo. 
9Classes abstratas e interfaces
Com a classe Veículo criada, é possível incorporar suas subclasses ao 
programa. Nesse caso, criaremos uma classe chamada Carro, que determinará 
a marca e o modelo da instância da classe (Figura 9).
Figura 9. Subclasse Carro e Teste. 
Para acompanhar o desempenho das classes adicionadas a essa aplicação, 
a Figura 10 apresenta o teste de execução e o seu resultado.
Figura 10. Teste de execução e resultado. 
Classes abstratas e interfaces10
Nessa pequena aplicação, criamos apenas uma subclasse de Veículo, 
denominada de Carro. No entanto, nada impede que sejam acrescentados 
novos tipo de veículo à estrutura. Para Turbina, acrescentaremos um tipo 
de campo enum, chamado de TipoTurbina, para facilitar a chamada a tipos 
variados de turbina nesse exemplo hipotético, os quais são declarados de forma 
estática. A Figura 11, a seguir, apresenta essaimplementação.
Figura 11. Subclasse Carro e Teste. 
CARVALHO, T. L. Orientação a objetos: aprenda seus conceitos e suas aplicabilidades 
de forma efetiva. São Paulo: Casa do Código, 2016.
FINEGAN, E.; LIGUORI, R. OCA Java SE 8: guia de estudos para o exame 1Z0-808. 3. ed. 
Porto Alegre: Bookman, 2018.
MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. de C. Desenvolvimento de software 
III: programação de sistemas web orientada a objetos em Java. Porto Alegre: Book-
man, 2016.
SCHILDT, H. Java para iniciantes. 6. ed. Porto Alegre: Bookman, 2014.
11Classes abstratas e interfaces
DICA DO PROFESSOR
Abstract factory é um padrão de design que fornece uma interface 
para criar famílias de objetos relacionados ou dependentes sem especificar suas classes 
concretas. Uma fábrica abstrata é uma 
classe que fornece uma interface para produzir uma família de objetos. Em Java, esse 
padrão pode ser implementado usando-se 
uma interface ou uma classe abstrata.
Nesta Dica do Professor, você vai entender o abstract factory.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) Normalmente, em programação orientada a objetos, utiliza-se o conceito de que uma 
classe pode receber atributos e métodos de uma classe denominada superclasse. Qual 
o nome dessa característica?
A) Característica polimórfica.
B) Característica de uma interface.
C) Característica de herança.
D) Característica de uma implementação.
E) Característica de uma abstração.
2) Normalmente, uma classe declarada como genérica, não tem um objeto com sua 
instância e, por conta disso, algumas situações exigem que sua declaração seja 
abstrata. Avalie as seguintes sentenças e marque a alternativa correta.
A) Toda classe abstrata servirá apenas de modelo. Logo, seus métodos deverão ser 
sobrescritos, mesmo que tenham sua implementação.
B) Uma classe abstrata servirá de modelo para outras classes. Seus métodos devem ser 
concretos, exigindo sua implementação, contendo, assim, as definições de sua assinatura. 
C) Uma classe abstrata servirá de modelo para outras classes. Seus métodos devem ser 
abstratos, ma são implementados na classe abstrata e têm definições de sua assinatura. 
D) Uma classe abstrata servirá de modelo para outras classes. Seus métodos podem ser 
abstratos e concretos, no entanto, eles não são implementados na classe abstrata, mas têm 
definições de sua assinatura. 
E) Toda classe abstrata servirá apenas de modelo. Logo, seus métodos deverão ser 
sobrescritos quando declarados como abstract, mesmo que tenham sua implementação.
3) Há situações em que não é desejável que certas classes tenham os mesmos privilégios 
que outras, como em um sistema bancário. Embora o cliente e o gerente herdem um 
método para login, os dois não estão no mesmo nível hierárquico, mesmo que ambos 
herdem a mesma característica de uma superclasse denominada pessoa. Para 
contornar essa situação e fazer com que cada um tenha sua própria tela de login, 
assinale a alternativa que mostra o melhor caminho.
A) Para que o usuário (cliente) faça login, de forma diferente do gerente e de outros tipos de 
usuários, é possível estender uma interface chamada login e implementar sua própria 
função de acesso, sem sobrescrever qualquer método.
Para que o usuário (cliente) faça login, de forma diferente do gerente e de outros tipos de B) 
usuários, ele deve estender uma classe abstrata, herdando assim sua implementação de 
acesso.
C) Para que o usuário (cliente) faça login, de forma diferente do gerente e de outros tipos de 
usuários, é possível implementar uma interface chamada login e programar sua própria 
função de acesso, sem sobrescrever qualquer método.
D) Para que o usuário (cliente) faça login, de forma diferente do gerente e de outros tipos de 
usuários, é possível implementar uma interface chamada login para incorporar a 
programação do método de acesso da interface, tornando-a independente da forma de 
implementação de sua superclasse.
E) Para que o usuário (cliente) faça login, de forma diferente do gerente e de outros tipos de 
usuários, é possível programar uma interface chamada login para implementar sua própria 
forma de acesso, tornando-a independente da forma de implementação de sua superclasse.
4) Um método abstrato tem apenas a assinatura e sua implementação e é realizado 
apenas em classes que implementam a classe abstrata ou a interface. Considerando as 
propriedades das classes abstratas, qual a saída do seguinte programa?
Conteúdo interativo disponível na plataforma de ensino!
A) Erro de compilação.
B) 2.
C) 4.
D) 10.
E) 20.
5) Mesmo que as classes abstratas sejam parecidas com as interfaces, ambas têm 
particularidades que as tornam únicas. Logo, marque a resposta que melhor 
representa cada uma delas.
A) Interfaces podem ter apenas métodos abstratos públicos; as classes abstratas não podem 
conter campos de dados. 
B) Na classe abstrata, a palavra-chave abstract é opcional para declarar um método. Enquanto 
na interface, a palavra-chave abstract é obrigatória para declarar um método como um 
resumo.
C) Tanto as interfaces como as classes abstratas podem conter métodos concretos.
D) Interface é utilizada quando implementações compartilham apenas a assinatura do método; 
classe abstrata é usada quando várias implementações do mesmo tipo compartilham um 
comportamento comum.
E) Interface é utilizada quando várias implementações do mesmo tipo compartilham um 
comportamento comum; classe abstrata é usada quando implementações compartilham 
apenas a assinatura do método.
NA PRÁTICA
O conceito de abstração tem papel fundamental para tratar 
de generalizações de classes em relação aos métodos. 
Existem os conceitos de classes abstratas e de interfaces 
que são os responsáveis por realizar abstrações de dados.
Neste Na Prática, veja um exemplo de aplicação dos conceitos 
de interface e de classes abstratas no desenvolvimento de um 
editor de cena.
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Android Interface Definition Language (AIDL)
O método final não pode ser substituído, assim, uma função abstrata não pode ser final. O 
sistema Android Interface Definition Language permite definir a interface de programação que o 
cliente e o serviço usam para se comunicar entre si, a partir da comunicação entre processos 
(IPC). No Android, um processo normalmente não pode acessar a memória de outro.
Conteúdo interativo disponível na plataforma de ensino!
Qual a diferença entre classe interna, classe aninhada e classe anônima?
Conteúdo interativo disponível na plataforma de ensino!
Java Interface: Aprenda a usar corretamente
Conteúdo interativo disponível na plataforma de ensino!

Mais conteúdos dessa disciplina