interfaces e classes abstratas
147
você está aquieste é um novo capítulo
Polimorsmo Real
8 interfaces e classes abstratas
A herança é apenas o começo. Para explorar o polimorsmo,
precisamos de interfaces (mas não do tipo GUI). Temos que ir
além da simples herança até um nível de exibilidade que você
só conseguirá projetando e codicando com especicações de
interfaces. Algumas das partes mais interessantes do Java não
poderiam ao menos existir sem interfaces, portanto mesmo se você
não projetar com elas por sua própria conta, ainda terá que usá-
las. Mas você vai querer projetar com elas. Precisará projetar com
elas. Vai se perguntar como conseguiu viver sem elas. O que é
uma interface? É uma classe 100% abstrata. O que é uma classe
abstrata? É uma classe que não pode ser instanciada. Em que isso
é útil? Você verá em breve. Mas se pensar no nal do último capítulo
e em como usamos argumentos polimórcos para que apenas um
método de Vet pudesse usar subclasses de Animal de todos os tipos,
bem, isso apenas arranhou a superfície. As interfaces representam o
prexo poli de polimorsmo. O ab de abstrato. A cafeína em Java.
148 capítulo 8
projetando com a herança
Esquecemos algo quando projetamos essa classe?
A estrutura da classe não está tão ruim. Foi projetada para que os códigos
duplicados fossem mantidos em um nível mínimo e sobrepusemos os métodos
que achamos que deveriam ter implementações especí cas da subclasse. Foi
construída para ser adequada e  exível a partir de uma perspectiva polimór ca,
já que podemos projetar programas usando a classe Animal e seus argumentos
(e declarações de matrizes), para que qualquer subtipo de Animal — inclusive
aqueles em que não pensamos no momento em que escrevemos nosso código
possa ser passado e usado no tempo de execução. Inserimos o protocolo
comum a todos os objetos Animal (os quatro métodos que queremos que todos
saibam que qualquer objeto Animal tem) na superclasse Animal e estamos
prontos para começar a criar novos objetos Lion, Tiger e Hippo.
Animal
picture
food
hunger
boundaries
location
makeNoise( )
eat( )
sleep( )
roam( )
Tiger
makeNoise( )
eat( )
Lion
makeNoise( )
eat( )
Feline
roam( )
Dog
makeNoise( )
eat( )
Cat
makeNoise( )
eat( )
Hippo
makeNoise( )
eat( )
Canine
roam( )
Wolf
makeNoise( )
eat( )
Sabemos que podemos dizer:
Wolf aWolf = new Wolf();
Esses dois têm o mesmo tipo.
aWolf
Wolf
Esses dois têm o mesmo tipo.
Esses dois têm o mesmo tipo.
E sabemos que podemos dizer:
Animal aHippo = new Hippo();
Esses dois NÃO têm o mesmo tipo.
aHippo
Animal
Esses dois NÃO têm o mesmo tipo.
Esses dois NÃO têm o mesmo tipo.
Uma referência de
Wolf a um objeto Wolf
Referência de
Animal a um
objeto Hippo

Get Use A Cabeça Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.