Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Programação Orientada a Objetos
Herança e Sobreposição
2
Herança e Sobreposição
super Sobreposição Restrições à sobreposição
3
Herança É quando novas classes herdam propriedades (dados e métodos) de outras classes existentes. Esse é um importante recurso da orientação a objetos que permite a reutilização de código. As classes que herdam as propriedades são chamadas subclasses e a classe pai é chamada superclasse. Em Java é usada a palavra extends para implementar a herança. Alan Santos
4
Herança A utilização da herança facilita a reutilização de código porque o código definido na superclasse pode ser utilizado automaticamente na subclasse Através da herança é possível representar a relação de generalização/especialização entre duas classes: a superclasse é uma generalização da(s) subclasse(s), e a subclasse é uma especialização da(s) superclasse(s). Alan Santos
5
Herança A classe Ponto2D abaixo representa um ponto geométrico no plano cartesiano com duas coordenadas x e y. class Ponto2D { int x, y; public Ponto2D(int x, int y) { this.x = x; this.y = y; } public Ponto2D ( ) { // this também pode ser usado para chamar construtores this (-1, -1); public void print ( ) { System.out.print (x +", "+ y); Alan Santos
6
Herança Suponha que queremos construir uma classe Ponto3D que represente um ponto tri- dimensional (com 3 coordenadas) de forma que as variáveis x e y não precisem ser declaradas em Ponto3D. Para isso, construa uma hierarquia de classes onde Ponto é a superclasse e Ponto3D é a subclasse, com os atributos x e y sendo herdados de Ponto. Alan Santos
7
Herança A herança deve ser utilizada visando a reutilização de comportamento. Ou seja, as classes derivadas devem se comportar como as superclasses. Para isso sempre deve existir uma hierarquia de Generalização /Especialização entre as classes. Alan Santos
8
Herança Um objeto do tipo círculo pode ser usado no lugar de um objeto do tipo elipse porque todo círculo é um tipo especial de elipse. Não há limites no número de níveis na hierarquia de herança. Métodos construtores não são herdados! Mas um construtor de uma classe base é chamado implicitamente antes da primeira linha do construtor da classe derivada. Alan Santos
9
super A declaração super pode ser usada como uma versão do this, ao que se refere à superclasse. O super faz a chamada do método construtor da superclasse. Também pode ser usada para chamar métodos da superclasse. Alan Santos
10
super Implemente uma versão melhorada da classe Ponto3D, onde o código abaixo, que está presente em ambas as classes, é substituído pela declaração super, que faz a chamada do método construtor da superclasse Ponto2D. this.x = x; this.y = y; Alan Santos
11
super Adicione em Ponto3D o método printPonto3D.
A implementação desse método deverá usar a declaração super.print ( ) para chamar o método print() da superclasse da instância this e possuir uma linha e código para imprimir a coordenada z; Alan Santos
12
Sobreposição (Overriding)
No exemplo anterior, foi necessário reescrever o método print na classe Ponto3D para que ele agora imprimisse a coordenada do ponto em 3 eixos (x, y, z). Podemos utilizar a propriedade de sobreposição. Reescreva o método print na classe Ponto3D com o mesmo nome ao invés de outro como utilizado (print Ponto3D). Mas, observe que o método deve ter a mesma assinatura (nome, argumentos e valor de retorno), senão não se trata de redefinição e sim de sobrecarga (overloading) do método. Alan Santos
13
Sobreposição (Overriding)
Crie uma classe TestePonto com o seguinte método main public static void main (String args []) { Ponto3D p3 = new Ponto3D( ); p3.print( ); } Ao executar esse código, você pode observar que foi chamado o método print da classe Ponto3D . Porém, se chamássemos um método da classe Ponto que não fosse sobrescrito na classe Ponto3D (por exemplo, se não existisse o método print na classe Ponto3D), automaticamente, seria chamado o método da superclasse (Ponto2D). Alan Santos
14
Restrições à sobreposição
Alguns métodos não podem ser sobrepostos em função dos modificadores que recebem: final: um método final nunca muda, todas as classes derivadas utilizam a mesma implementação. As chamadas aos métodos finais são resolvidas em tempo de compilação (vinculação estática). static: é implicitamente um método final. private: são implicitamente finais, porque não podem ser sobrescritos nas classes derivadas embora seja possível escrever um método com mesma assinatura numa classe derivada. Alan Santos
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.