Java

Wednesday, May 03, 2006

 

Sobrescrita

Um método herdade pode ser sobrescrito para permitir que a classe herdeira tenha comportamentos mais específicos que a superclasse. Um método sobrescrito não pode alterar a lista de parâmetros. Não pode também restringir o tipo de acesso. Um método declarado como public não pode ser sobrescrito pela classe herdeira como private. No entanto, pode-se alargar o tipo de acesso. Um método declarado como protected pode ser sobrescrito pela classe herdeira como public. O tipo de retorno não pode também ser modificado, a não ser trocado por um dos seus subtipos. Importante na situação de sobrescrita de métodos é reter também a idéia básica do polimofirsmo: em tempo de execução, o método chamado, por exemplo, por a.eat, onde a é declarado como Animal a; não é o método da classe declarada, mas do tipo instânciado. Se a se refere a um objeto do tipo Cavalo, que herda Animal, o método eat() chamado é da classe Cavalo.

O exemplo abaixo serve para ilustrar a situação de sobrescrita e também sobrecarga.


class Animal{

public Animal(String s){}

public void eat(Animal a){
System.out.println("Animal come");
}
}

class Cavalo extends Animal{

public Cavalo(String s){
super(s);
}

public void eat(Animal a){
System.out.println("Cavalo-Animal come");
}

public void eat(Cavalo c){
System.out.println("Cavalo come");
}

public static void main(String args[]){
Cavalo c = new Cavalo("c");
c.eat(c);
Animal a = new Animal("a");
a.eat(a);
a = new Cavalo("c");
a.eat(a);
}
}

O resultado da execução deste programa será:

Cavalo come
Animal come
Cavalo-Animal come

c.eat(c) chama o método eat() de Cavalo, que sobrescreve eat() de Animal. a.eat(a) chama o método eat() de Animal. Por fim, a.eat(a), onde a variável a, embora declarada como do tipo Animal, se refere, na verdade, a uma instância de Cavalo, chama o método sobrecarregado eat(Animal a) da classe Cavalo. A lógica aqui é a seguinte: o tipo de objeto referido pela variável a determina de qual classe o método será chamado. No caso, da classe Cavalo. E o tipo declarado da variável a determina qual dos métodos sobrecarregados da Classe Cavalo será chamado.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?