Galera… estava olhando um exemplo no seguinte código:
[code]public class Foo {
public void doFooStuff() {
}
}
public class Bar extends Foo {
public void doBarStuff() {
}
}
class Test {
public static void main(String args[]) {
Foo reallyABar = new Bar(); **
}
}[/code]
** -> O que eu realmente não entendo… é porque que eu utilizo Foo nesta linha de código… tudo bem, entendo que é correto fazer isto… seguindo o conceito de herança, mas queria saber qual é a vantagem de estar utilizando desta forma ao invés dessa…
class Test {
public static void main(String args[]) {
Bar reallyABar = new Bar();
}
}
Vlw
esse conceito eh parecido com o de utilizar interfaces, usar interfaces ou classes abstratas garante compatibilidade entre os códigos e permite que a manutenção seja mais fácil…
por exemplo, se um dia a classe Vector for deprecada do Java e vc tiver a declaração:
Vector meuVetor = new Vector();
, ao invés de:
List meuVetor = new Vector();
será necessário verificar a chamada de cada metodo a partir de meuVetor.metodo() pra verificar se nao estah imcompativel com a nova implementação.
outra vantagem é permitir que exista polimorfismo em tempo de execução, ou seja, vc declara a variavel como Map, mas dependendo de certos fatores ele será um TreeMap ou um HashMap, neste caso vc garante (através da contrato da interface Map) que tuas chamadas terão sempre a mesma assinatura para as possíveis classes implementadoras…
enfim, isso eh polimorfismo!
esse conceito eh parecido com o de utilizar interfaces, usar interfaces ou classes abstratas garante compatibilidade entre os códigos e permite que a manutenção seja mais fácil…
por exemplo, se um dia a classe Vector for deprecada do Java e vc tiver a declaração:
Vector meuVetor = new Vector();
, ao invés de:
List meuVetor = new Vector();
será necessário verificar a chamada de cada metodo a partir de meuVetor.metodo() pra verificar se nao estah imcompativel com a nova implementação.
outra vantagem é permitir que exista polimorfismo em tempo de execução, ou seja, vc declara a variavel como Map, mas dependendo de certos fatores ele será um TreeMap ou um HashMap, neste caso vc garante (através da contrato da interface Map) que tuas chamadas terão sempre a mesma assinatura para as possíveis classes implementadoras…
enfim, isso eh polimorfismo!