herança e polimor smo
125
você está aquieste é um novo capítulo
Melhor Viver em
Objetópolis
7 herança e polimor smo
Planeje seus programas com o futuro em mente. Se
houvesse uma maneira de escrever código Java de tal modo que
se pudesse tirar mais férias, o quanto isso seria bom para você?
E se pudesse escrever códigos que outra pessoa conseguisse
estender facilmente? E se pudesse escrever códigos que fossem
exíveis, para aquelas irritantes alterações de último minuto nas
especi cações, isso seria algo no qual estaria interessado? Então
este é seu dia de sorte. Por apenas três pagamentos facilitados
de 60 minutos, você poderá ter tudo isso. Quando chegar ao
Planejamento do Polimor smo, você aprenderá as 5 etapas para
a obtenção de um projeto de classes mais adequado, os 3 truques
do polimor smo, as 8 maneiras de criar um código  exível e, se
agir agora — uma lição bônus sobre as 4 dicas para a exploração
da herança. Não demore, uma oferta dessa grandeza lhe fornecerá
a liberdade para projetar e a  exibilidade para programar que
você merece. É rápido, é fácil e já está disponível. Comece hoje e
forneceremos um nível extra de abstração!
Éramos codifi cadores que ganhávamos mal
e trabalhávamos muito até testarmos o
Planejamento do Polimorfi smo. Mas, graças
ao Planejamento, nosso futuro é brilhante.
O seu também pode ser!
126 capítulo 7
o poder da herança
A guerra das cadeiras revisitada...
Lembra-se do Capítulo 4, quando Larry (o prossional dos procedimentos) e Brad (o sujeito da OO) estavam competindo pela
cadeira Aeron? Vejamos alguns trechos dessa história para examinarmos os aspectos básicos da herança.
Larry: Você tem código duplicado! O procedimento de rotação aparece em todos os quatro itens Shape. É um projeto estúpido.
Você tem que manter quatro “métodos” de rotação diferentes. Em que isso poderia ser bom?
Brad: Oh, acho que você não viu o projeto nal. Deixe que eu lhe mostre como a herança da OO funciona, Larry.
Square
rotate()
playSound()
Circle
rotate()
playSound()
Triangle
rotate()
playSound()
Amoeba
rotate()
playSound()
1
Procurei o que
as quatro classes
tinham em comum.
Shape
rotate()
playSound()
Elas são formas e todas giram e
reproduzem som. Portanto extraí os
recursos comuns e os inseri em uma
nova classe chamada Shape.
2
Em seguida, vinculei as
outras quatro classes
de formas a nova
classe Shape, em um
relacionamento chamado
herança.
3
Shape
rotate()
playSound()
Square
Circle
Triangle
Amoeba
Superclasse
Subclasses
Você pode ler isso como “Square
herda de Shape”, “Circle herda de
Shape” e assim por diante. Removi
rotate( ) e playSound( ) das
outras formas, portanto agora há
apenas uma cópia a manter.
Diz-se que a classe Shape é a
superclasse das outras quatro
classes. As outras quatro são
as subclasses de Shape. As
subclasses herdam os métodos da
superclasse. Em outras palavras,
se a classe Shape tiver uma
funcionalidade, então, as
subclasses automaticamente terão
essa mesma funcionalidade.
E quanto ao método rotate( )
de Amoeba?
Larry: Não é esse o problema
aqui — que a forma de amoeba
tinha um procedimento de rotação
e reprodução de som totalmente
diferentes?
Como a amoeba pode fazer
algo diferente se ela herda sua
funcionalidade da classe Shape?
Brad: Essa é a última etapa.
A classe Amoeba sobrepõe os
métodos da classe Shape. Portanto,
no tempo de execução, a JVM
saberá exatamente que método
rotate( ) executar quando alguém
solicitar que o objeto Amoeba gire.
Shape
rotate()
playSound()
Square
Circle
Triangle
Superclasse
(mais abstrata)
Subclasses
(mais especícas)
Amoeba
rotate()
//código de
rotação
//especíco
da amoeba
playSound()
//código de
reprodução de
som
//especíco
da amoeba
Métodos de
sobreposição
Fiz com que a classe Amoeba
sobrepusesse os métodos rotate(
) e playSound( ) da superclasse
Shape. Sobrepor signica apenas
que uma subclasse redenirá um
de seus métodos herdados quando
precisar alterar ou estender o
comportamento desse método
.
4

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.