quase, o termo é sobrescrita, e isso é sim um método sobrescrito.
F
faeldix
se é… pq a classe filha nao conseguiu chamar o seu metodo??
S
sergiotaborda
faeldix:
resumindo… isso nao é uma reescrita??? visto que a classe Filha nao consegue vizualizar o metodo através da heranca??
Não. isso não é uma sobre-escrita.
A clase filha não consegue ver o método da mae porque vc o definiu com acesso default e a filha em outro pacote. Logo, o método de pacote da mãe não é acessivel à filha.
A filha então define um método com o mesmo nome ( coincidencia).
Isto é um exemplo de overload ( sobrecarga) e não de override (sobre-escrita)
Quando vc criou o main criou-o no pacote da mae e por isso tem acesso, mas tem acesso via pacote e por isso o resultado é mesmo. As invocações estão acontecendo no método que é visivel na mãe por pacote e não adianta criar herança
Se o seu objetivo é herança , torne o método da mae protected ou mova a classe filha para o mesmo pacote da mae.
F
faeldix
sobrecarga???
void metodo();
void metodo(int a);
isso aqui é sobrecarga, nao?
A
alexmonassa
Isso não é nem sobrescrita nem sobrecarga , já que pra ser sobrecarga o método sobrecarregante deverá mudar as variáveis locais de assinatura do método sobrecarregado. Só compila pq o método default não é visívil para a classe Filha , é como esse método não existisse para ela .
S
sergiotaborda
faeldix:
sobrecarga???
void metodo();
void metodo(int a);
isso aqui é sobrecarga, nao?
Sobrecarga é qualquer forma do mesmo método com o mesmo nome (não com a mesma assinatura).
A sobrecarga que é útil é aquela que tem o mesmo escopo, mas nada impede que tenha escopo diferente como o caso aqui. Outro caso com escopo diferente seria criar um método estático e outro não estático com o mesmo nome.
Já agora, sobrescrita é qualquer forma do mesmo método com o mesmo nome e assinatura. O retorno não faz parte da assinatura.
A
alexmonassa
Um não entendi direito o q vc quis dizer mas sobrecarga é quando há a mudança na variável que o método recebe . Tudo o Mais pode mudar ou não , mas é obrigatório modificar as variáveis que o método recebe (Aquelas entre parênteses) . Se vc modificar somente o tipo de retorno isso não é sobrecarga de método. Não compila na verdade da mesma forma se colocares static somente num método herdado de outra classe não compilará somente se houver a sobrecarga aí sim compilará.
Já sobrescrita é quando realiza-se apenas a modificação no conteúdo do método. podendo mudar o retorno para um do seus subtipos, ou ainda as restrições do método (que não poderá ser mais restritivo mas poderá ser menos restritivo).
V
ViniGodoy
Realmente não é uma reescrita. Acabam sendo dois métodos completamente diferentes. É o mesmo que declarar um método private na classe mãe e outro com o mesmo nome na classe filha.
Creio que também não seja um caso de sobrecarga, já que ambos os métodos estão em escopos diferentes. No fundo, o nome completo do método é Mae.metodo e Filha.metodo.
S
sergiotaborda
ViniGodoy:
Realmente não é uma reescrita. Acabam sendo dois métodos completamente diferentes. É o mesmo que declarar um método private na classe mãe e outro com o mesmo nome na classe filha.
Creio que também não seja um caso de sobrecarga, já que ambos os métodos estão em escopos diferentes. No fundo, o nome completo do método é Mae.metodo e Filha.metodo.
Hum… não é bem o mesmo. Se declara um metodo como private na mãe o mesmo na filha o java aceita isso como overriding (métodos podem ser declaranos com maior visibilidade nos filhos que na mae)
Andei procurando e realmente a sobrecarga só é definida para o mesmo escopo ( em c++, não encontrei para java). Então a conclusão é que aquele artificio não seria nem overriding nem overloading. Mas em C# não é possivel definir o mesmo método sendo estático e não estático , em java sim. Isto deve significa algum tipo de over-something uma vez que é poibido em outras linguagens…