A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação Orientada a Objetos

Apresentações semelhantes


Apresentação em tema: "Programação Orientada a Objetos"— Transcrição da apresentação:

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


Carregar ppt "Programação Orientada a Objetos"

Apresentações semelhantes


Anúncios Google