Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] SuperClasse vs SubClasse como referência

Olá, encontrei vários tópicos desse assunto aqui no fórum, e em outros locais. Porém, ainda não encontrei exemplos mais concretos de quando utilizar um ou o outro modo de instanciar um objeto.

Exemplo:

A SuperClasse Letra é estendida na SubClasse A* e na SubClasse *B.

A* e *B são filhas de Letra.

Posso fazer assim:

Letra a= new A();

ou

A* a = new *A();

Vi exemplos falando que isso seria útil num método que apenas aceitasse objeto tipo Letra como parâmetro.

Porém, mesmo criando o objeto da segunda maneira, ainda assim A* estenderia (seria filha de) Letra, e *A poderia ser usada nesse método.

Também não podemos acessar os métodos das subclasses, se colocarmos como referência a superclasse.

Em que situações do cotidiano, numa aplicação real, que utilizamos o primeiro modo?

SuperClasse sb = new SubClasse ();

Se alguém puder me indicar algum código no GitHub ou similar que use muito desse recurso, agradeceria muito.

Muito obrigado :)

Obs: os asteriscos foram erros de formatação.

1 resposta
solução!

Ola,

No mundo real, eu posso ter um sistema que cria letras do idioma Japones, e o seu letras do idioma Portugues.

Voce pode escrever um sistema gerenciador de letras, e aplicar o beneficio do polimorfismo, esperando receber Letras. Assim quem for cliente do seu sistema podera usar o modulo de gestao de letras, mesmo sendo A, B, X, Y e etc.

Se implementar um sistema que so aceita letras especificas, estaremos forcando o uso apenas desses tipos como argumento, e quem tem letras de outro valor, nao poderia fazer uso do seu modulo, pois foi desenvolvido pensando apenas implementacao concreta para apenas um publico.


Letra->A
Letra->B
Letra->C
Letra->X
Letra->Y

gerenciar(Letra l); <-- aqui esta programando voltado a interface, e favorecendo o polimorfismo, tendo baixo acoplamento e alta coesao, 
pois voce quer gerenciar letras.

gerenciar(A a); <--- aqui esta programando voltado a implementacao, classe A. 

Pense agora em um sistema que gerencia os funcionarios da empresa, voce quer gerir qualquer funcionario, e nao apenas um tipo especifico.