Escolar Documentos
Profissional Documentos
Cultura Documentos
MÓDULO 3
Conceitos básicos II
Iniciação à Programação orientada a Objetos
Herança
4 Herança
Conteúdo
4.1 Agregação e composição 05
A herança aplica-se sobre as classes e indica que estas podem ter descendência a que cederão propriedades e
métodos. Desta forma, é gerada uma estrutura hierarquizada.
Cor
Motor
------------------
Acelerar()
Travar()
Classe Carro
Cor =”Vermelha”
Motor =”Diesel”
Portas
Portas =5
ABS
ABS =”sim”
------------------
Acelerar()
Virar()
Travar()
Girar()
Classe Seat
Observemos que o objeto Seat Cordoba, por pertencer à classe Seat, adquire todas as suas propriedades e métodos,
mas, por sua vez, como a classe Seat herda da classe Carro, o objeto também apresenta todas as propriedades
e métodos desta. Além disso, como podemos ver na imagem, continua a ser no objeto e não nas classes onde
as propriedades obtêm valor.
• Composição. Neste caso, existe um objeto que chamamos contentor, formado por objetos de outra classe,
a que chamamos contidos, de forma que a vida dos contidos está limitada à do contentor.
O Java permite converter uma referência à classe derivada numa referência à classe base implicitamente, assim
como converter uma referência à classe base, numa referência à classe derivada, utilizando casting:
Animal a;
Cão
a = new Cão(); //Correto
Animal
Cão p;
Cavalo
p = new Animal(); // Erro
px
2 1
4
x 3
x Ponto
y y
1
cor 5
Entre classes irmãs, não se podem realizar conversões, nem sequer com o operador casting. É lógico que não
se pode efetuar a conversão, já que existirão atributos e métodos numa classe, que não estarão presentes na
outra e vice-versa.
Em Java, não são permitidas conversões, entre as referências e os tipos fundamentais de dados, nem com casting:
int a = 3;
Ponto p = (Ponto) a; // Erro.
Para além disso, em Java não existe a herança múltipla, o que implica que uma classe apenas possa herdar de
uma só classe. Em alternativa, em linguagens como C++, esta é produzida, de modo que uma classe poderia
herdar de várias (poderia apresentar mais de um pai).
• Ligação estática. Consiste em decidir que método executar em função do tipo de referência com a qual
se está a apontar para o objeto (executa-se o Método1 da classe base).
A vantagem da ligação estática consiste em ser mais rápida que a ligação dinâmica porque, em tempo
de compilação já se sabe que método executar. Contudo, apresenta o inconveniente de, normalmente, se
querer executar o método do objeto apontado e não o da referência usada para apontar.
• Ligação dinâmica. Consiste em decidir que método se deve executar em função do tipo de objeto que se
está a apontar, a partir da referência (executa-se o Método1 da classe derivada).
A ligação dinâmica é mais lenta porque, até chegar o momento de executar o método, não sabe a que objeto
estará apontada a referência.
O Java utiliza, por defeito, a ligação dinâmica e, se se pretende usar a estática, deve indicar-se o modificador
final ao método.
Exemplo:
class Ponto {
int x, y;
super.finalize();
Exemplo:
class Pixel {
int x, y, color;