Palavra reservada this · Herança - continuação O Java ao contrário de C++ não suporta...

13
Palavra reservada this Palavra reservada this Em Java podemos ter um parâmetro de Em Java podemos ter um parâmetro de um método e um atributo de uma classe um método e um atributo de uma classe com o mesmo nome. Caso façamos uma com o mesmo nome. Caso façamos uma referência a esta variável, pelo princípio referência a esta variável, pelo princípio da localidade estaremos referenciando da localidade estaremos referenciando aquela variável cuja declaração estiver aquela variável cuja declaração estiver mais próxima, no caso o parâmetro. Caso mais próxima, no caso o parâmetro. Caso desejemos referenciar o atributo da classe desejemos referenciar o atributo da classe e não o parâmetro devemos usar a e não o parâmetro devemos usar a palavra reservada palavra reservada this this antes do nome da antes do nome da variável.. variável..

Transcript of Palavra reservada this · Herança - continuação O Java ao contrário de C++ não suporta...

Palavra reservada thisPalavra reservada this Em Java podemos ter um parâmetro de Em Java podemos ter um parâmetro de

um método e um atributo de uma classe um método e um atributo de uma classe com o mesmo nome. Caso façamos uma com o mesmo nome. Caso façamos uma referência a esta variável, pelo princípio referência a esta variável, pelo princípio da localidade estaremos referenciando da localidade estaremos referenciando aquela variável cuja declaração estiver aquela variável cuja declaração estiver mais próxima, no caso o parâmetro. Caso mais próxima, no caso o parâmetro. Caso desejemos referenciar o atributo da classe desejemos referenciar o atributo da classe e não o parâmetro devemos usar a e não o parâmetro devemos usar a palavra reservada palavra reservada this this antes do nome da antes do nome da variável..variável..

Vejamos o seguinte exemploVejamos o seguinte exemplo

public class Exemplopublic class Exemplo{{

private int testada = 20;private int testada = 20;

public void testaPalavra(int testada)public void testaPalavra(int testada){{

JOptionPane.showMessageDialog(null,"Parametro = JOptionPane.showMessageDialog(null,"Parametro = "+testada+" Atributo = "+this.testada);"+testada+" Atributo = "+this.testada);}}

public static void main(String args[])public static void main(String args[]){{

Exemplo algum = new Exemplo();Exemplo algum = new Exemplo();algum.testaPalavra(8);algum.testaPalavra(8);

}}}}

Herança Herança -- continuaçãocontinuação Vimos anteriormente que o nivel de protecao de Vimos anteriormente que o nivel de protecao de

atributos e metodos pode ser public, protectec e atributos e metodos pode ser public, protectec e private e que componentes declarados como private e que componentes declarados como private nao podem ser acessados por suas private nao podem ser acessados por suas subclasses. Uma forma de contornar isto e criar subclasses. Uma forma de contornar isto e criar metodos set e get publicos de forma que a metodos set e get publicos de forma que a subclasse possa acessar estes atributos atraves subclasse possa acessar estes atributos atraves dos metodos.dos metodos.

Classes abstratas, como visto anteriormente sao Classes abstratas, como visto anteriormente sao classes que nao podem ser instanciadas, cuja classes que nao podem ser instanciadas, cuja finalidade e agrupar caracteristicas que devem finalidade e agrupar caracteristicas que devem ser herdadas por outras classes.ser herdadas por outras classes.

Metodos declarados como abstratos por sua vez Metodos declarados como abstratos por sua vez nao fornecem implementacoes, estes metodos nao fornecem implementacoes, estes metodos deverao obrigatoriamente ser implementados nas deverao obrigatoriamente ser implementados nas subclasses.subclasses.

Herança Herança -- continuaçãocontinuação O Java ao contrário de C++ não suporta herança O Java ao contrário de C++ não suporta herança

múltipla;múltipla; Toda classe herda da classe object.Toda classe herda da classe object. Uma classe pode herdar de qualquer classe desde Uma classe pode herdar de qualquer classe desde

que ela não tenha o modificador que ela não tenha o modificador finalfinal.. Polimorfismo permite programar no geral em vez Polimorfismo permite programar no geral em vez

de programar no especifico.de programar no especifico. Polimorfismo permite escrever programas que Polimorfismo permite escrever programas que

processem objetos que compartilham a mesma processem objetos que compartilham a mesma superclasse em uma hierarquia de classes como superclasse em uma hierarquia de classes como se todas fossem objetos da superclasse.se todas fossem objetos da superclasse.

Já vimos como implementar polimorfismo por Já vimos como implementar polimorfismo por overloading overloading (sobrecarga).(sobrecarga).

Vejamos agora como implementar polimorfismo Vejamos agora como implementar polimorfismo por por override.override.

Polimorfismo por overridePolimorfismo por override Um método de uma subclasse pode Um método de uma subclasse pode

reescrever um método da superclasse de reescrever um método da superclasse de forma que ele atenda melhor suas forma que ele atenda melhor suas necessidades. Para isto o método da necessidades. Para isto o método da subclasse deve ter a mesma assinatura do subclasse deve ter a mesma assinatura do método da superclasse.método da superclasse.

Os modificadores de acesso não precisam Os modificadores de acesso não precisam ser os mesmos entretanto o método da ser os mesmos entretanto o método da subclasse deve ter o modificador de subclasse deve ter o modificador de acesso igual ou menos restritivo que o acesso igual ou menos restritivo que o modificador de acesso do método original.modificador de acesso do método original.

Vejamos o seguinte exemplo:Vejamos o seguinte exemplo:

public class SuperClassepublic class SuperClasse{{

void mostra(int y)void mostra(int y){{

System.out.println("da superclasse: "+y);System.out.println("da superclasse: "+y);}}

}}

public class SubClasse extends SuperClassepublic class SubClasse extends SuperClasse{{

public void mostra(int y)public void mostra(int y){{

System.out.println("da subclasse: "+y);System.out.println("da subclasse: "+y);}}

public static void main(String args[])public static void main(String args[]){{SuperClasse objSuper = new SuperClasse();SuperClasse objSuper = new SuperClasse();SubClasse objSub = new SubClasse();SubClasse objSub = new SubClasse();objSuper.mostra(10);objSuper.mostra(10);objSub.mostra(10);objSub.mostra(10);}}

}}

Polimorfismo por overridePolimorfismo por override

Podemos observar a materialização Podemos observar a materialização do conceito “é um” entre objetos de do conceito “é um” entre objetos de subclasse e de superclasse no fato subclasse e de superclasse no fato de que onde é esperado um objeto de que onde é esperado um objeto de uma classe pode ser recebido um de uma classe pode ser recebido um objeto de sua subclasse.objeto de sua subclasse.

Vejamos o seguinte exemplo:Vejamos o seguinte exemplo:

public class SuperClassepublic class SuperClasse{{

void mostra(int y)void mostra(int y){{

System.out.println("da superclasse: "+y);System.out.println("da superclasse: "+y);}}

}}

public class SubClasse extends SuperClassepublic class SubClasse extends SuperClasse{{

public void mostra(int y)public void mostra(int y){{

System.out.println("da subclasse: "+y);System.out.println("da subclasse: "+y);}}

public static void main(String args[])public static void main(String args[]){{SuperClasse objSuper = new SuperClasse();SuperClasse objSuper = new SuperClasse();SubClasse objSub = new SubClasse();SubClasse objSub = new SubClasse();objSuper.mostra(10);objSuper.mostra(10);objSub.mostra(10);objSub.mostra(10);

SuperClasse obj2Super = objSub;SuperClasse obj2Super = objSub;System.out.println("Método do objeto da subclasse atribuído ao obj da superclasse.");System.out.println("Método do objeto da subclasse atribuído ao obj da superclasse.");obj2Super.mostra(10);obj2Super.mostra(10);}}

}}

Polimorfismo por overridePolimorfismo por override

Na tabela acima podemos ver Na tabela acima podemos ver resumidamente os modificadores de resumidamente os modificadores de acesso e os direitos que cada um acesso e os direitos que cada um deles dão.deles dão.

ExercicioExercicioAs classes a seguir tem o objetivo de “representar” circulos e quadrados na tela.

Esta classe declara uma lista de figuras que na verdade e formada por um vetor de circulos e um vetor de quadrados

Classe que testa a lista de figuras

ExercicioExercicio

Usando heranca refaca a classe Usando heranca refaca a classe circulo e quadrado de forma que circulo e quadrado de forma que ambas herdem de uma classe ambas herdem de uma classe chamada figura.chamada figura.

Refaca a classe ListadeFiguras de Refaca a classe ListadeFiguras de forma que ela possua um unico vetor forma que ela possua um unico vetor de figuras que na verdade podem de figuras que na verdade podem armazenar tanto circulos quanto armazenar tanto circulos quanto quadrados pois, uma vez que ambos quadrados pois, uma vez que ambos herdam de figura, ambos sao herdam de figura, ambos sao considerados figuras.considerados figuras.