Palavra reservada this Em Java podemos ter um parâmetro de um método e um atributo de uma classe com o mesmo nome. Caso façamos uma referência a esta variável, pelo princípio da localidade estaremos referenciando aquela variável cuja declaração estiver mais próxima, no caso o parâmetro. Caso desejemos referenciar o atributo da classe e não o parâmetro devemos usar a palavra reservada this antes do nome da variável..
Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Parametro = "+testada+" Atributo = "+this.testada); public static void main(string args[]) Exemplo algum = new Exemplo(); algum.testapalavra(8);
Herança - continuação Vimos anteriormente que o nivel de protecao de atributos e metodos pode ser public, protectec e private e que componentes declarados como private nao podem ser acessados por suas subclasses. Uma forma de contornar isto e criar metodos set e get publicos de forma que a subclasse possa acessar estes atributos atraves dos metodos. Classes abstratas, como visto anteriormente sao classes que nao podem ser instanciadas, cuja finalidade e agrupar caracteristicas que devem ser herdadas por outras classes. Metodos declarados como abstratos por sua vez nao fornecem implementacoes, estes metodos deverao obrigatoriamente ser implementados nas subclasses.
Herança - continuação O Java ao contrário de C++ não suporta herança múltipla; Toda classe herda da classe object. Uma classe pode herdar de qualquer classe desde que ela não tenha o modificador final. Polimorfismo permite programar no geral em vez de programar no especifico. Polimorfismo permite escrever programas que processem objetos que compartilham a mesma superclasse em uma hierarquia de classes como se todas fossem objetos da superclasse. Já vimos como implementar polimorfismo por overloading (sobrecarga). Vejamos agora como implementar polimorfismo por override.
Polimorfismo por override Um método de uma subclasse pode reescrever um método da superclasse de forma que ele atenda melhor suas necessidades. Para isto o método da subclasse deve ter a mesma assinatura do método da superclasse. Os modificadores de acesso não precisam ser os mesmos entretanto o método da subclasse deve ter o modificador de acesso igual ou menos restritivo que o modificador de acesso do método original. Vejamos o seguinte exemplo:
public class SuperClasse void mostra(int y) System.out.println("da superclasse: "+y); public class SubClasse extends SuperClasse public void mostra(int y) System.out.println("da subclasse: "+y); public static void main(string args[]) SuperClasse objsuper = new SuperClasse(); SubClasse objsub = new SubClasse(); objsuper.mostra(10); objsub.mostra(10);
Polimorfismo por override Podemos observar a materialização do conceito é um entre objetos de subclasse e de superclasse no fato de que onde é esperado um objeto de uma classe pode ser recebido um objeto de sua subclasse. Vejamos o seguinte exemplo:
public class SuperClasse void mostra(int y) System.out.println("da superclasse: "+y); public class SubClasse extends SuperClasse public void mostra(int y) System.out.println("da subclasse: "+y); public static void main(string args[]) SuperClasse objsuper = new SuperClasse(); SubClasse objsub = new SubClasse(); objsuper.mostra(10); objsub.mostra(10); SuperClasse obj2super = objsub; System.out.println("Método do objeto da subclasse atribuído ao obj da superclasse."); obj2super.mostra(10);
Polimorfismo por override Na tabela acima podemos ver resumidamente os modificadores de acesso e os direitos que cada um deles dão.
Exercicio As 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
Exercicio Usando heranca refaca a classe circulo e quadrado de forma que ambas herdem de uma classe chamada figura. Refaca a classe ListadeFiguras de forma que ela possua um unico vetor de figuras que na verdade podem armazenar tanto circulos quanto quadrados pois, uma vez que ambos herdam de figura, ambos sao considerados figuras.