Alguem poderia me explicar isso?

public class Pai {

voif f(String s){}

}

public abstract class Filha extends Pai{

abstract void f(String g);//eu gostaria de entender o que eu estou fazendo aqui , subscrição, sobrecarga, ou que pessoal, alguem me de uma força por favor !!!!!!!!

}

Vc ta declarando um método na classe abstrata. Ele não ta nem sendo sobrescrito nem sobrecarregado. A primeira classe que herdar a classe abstrata terá que sobrescrever seu método que por coincidencia tem o mesmo nome.

Fala rafael blz?

Kra este método está sendo subscrito, tava estudando isto agora pouco no livro da kathy, para sobrecarregar as regras são as seguintes:

Os métodos sobrecarregados, devem alterar a lista de argumentos.
Os métodos sobrecarregados, podem alterar o tipo de retorno.
Os métodos sobrecarregados, podem alterar o modificador de acesso.
Os métodos sobrecarregados, podem declarar exceções verificadas novas, ou mais abrangentes.
Um método pode ser sobrecarregado, na mesma classe ou em uma subclasse.

Como neste caso, não teve alteração na lista de argumentos, e manteve o tipo de retorno, e não modificou o acesso, ele sobrescreveu o método.

Valeu!!

[quote=danielbussade]Fala rafael blz?

Kra este método está sendo subscrito, tava estudando isto agora pouco no livro da kathy, para sobrecarregar as regras são as seguintes:

Os métodos sobrecarregados, devem alterar a lista de argumentos.
Os métodos sobrecarregados, podem alterar o tipo de retorno.
Os métodos sobrecarregados, podem alterar o modificador de acesso.
Os métodos sobrecarregados, podem declarar exceções verificadas novas, ou mais abrangentes.
Um método pode ser sobrecarregado, na mesma classe ou em uma subclasse.

Como neste caso, não teve alteração na lista de argumentos, e manteve o tipo de retorno, e não modificou o acesso, ele sobrescreveu o método.

Valeu!!
[/quote]

Como esse método foi sobrescrito se não houve nenhuma implementação? Para mim ainda é um método de uma classe abstrata e não foi herdado.

É verdade anderson, não tinha reparado que o método era abstract.

valew ai pessoal agora entendi :), valew a força Anderson e Daniel !

[quote=anderson.bonavides][quote=danielbussade]Fala rafael blz?

Kra este método está sendo subscrito, tava estudando isto agora pouco no livro da kathy, para sobrecarregar as regras são as seguintes:

Os métodos sobrecarregados, devem alterar a lista de argumentos.
Os métodos sobrecarregados, podem alterar o tipo de retorno.
Os métodos sobrecarregados, podem alterar o modificador de acesso.
Os métodos sobrecarregados, podem declarar exceções verificadas novas, ou mais abrangentes.
Um método pode ser sobrecarregado, na mesma classe ou em uma subclasse.

Como neste caso, não teve alteração na lista de argumentos, e manteve o tipo de retorno, e não modificou o acesso, ele sobrescreveu o método.

Valeu!!
[/quote]

Como esse método foi sobrescrito se não houve nenhuma implementação? Para mim ainda é um método de uma classe abstrata e não foi herdado.[/quote]

Agora olha só Anderson, eu discordo de você que a classe não herdou o método, ela herdou sim, o que não aconteceu foi a reescrita. A próxima classe concreta qie herdar de filha, eh que irá realmente sobreecrever o método.

Compreendo. O que vc disse realmente tem sentido até pq existe o extends na sub-classe. Mas se alguêm com mais experiência poder explicar isso melhor axo que fica mais elegante.

O que está acontecendo é que o método f da classe Pai está sendo “sobrescrito” na classe Filha de maneira atípica, por um método abstrato
que acaba por “esconder” o método f das subclasses abaixo da classe Filha pelo fato de forçar as subclasses concretas da classe Filha
a implementarem o método e uma chamada a super ocasionaria um erro, pelo fato de o método acima ser abstrato. De qualquer maneira, coisas desse tipo (polimorfismo) continuam funcionando normalmente:

class Teste { public static void main(String [] args){ Pai p = new SubFilha(); p.f("teste"); Filha f = new SubFilha(); f.f("teste"); } }
Lembrando que SubFilha é obrigada a fornecer implementação para o método abstrato f herdado da classe Filha.

Bom o que está acontecendo é o seguinte:

class pai: “olha eu sou aqui um metodo concreto e tenho minhas tarefas a fazer”:
class Filha: “olha agora eu sou um metodo abstrato nao tenho nada para fazer aqui, mas sou o mesmo metodo da class pai, pq tudo que meu pai faz eu posso fazer também”.

Lembrando pessoal que o modificador abstract é um tipo de modificador que nao se refere à acesso entao por isso que é possivel acontecer isso ai, eu confudia isso bastante com o modificador de acesso que tem a regra que vc nao pode tirar do maior para o menor tipo de public virar private.

espero ter ajudado :smiley:

Observem que o método da classe Pai tem visibilidade de pacote. Portanto a resposta correta a esta questão depende do fato de ambas as classes estarem no mesmo pacote ou não.

O que esta acontecendo é uma sobrecarga. Bem atipica é verdade…mas é uma sobrecarga.
Uma boa maneira de saber isso é olhando no ECLIPSE…
crie as 2 classes…desenvolva o mesmo codigo…
vc pode verificar que uma seta verde aparece ao lado da assinatura do metodo
da classe abstrata…ela indica uma sobrecarga, se colocar o mauso em cima da seta podera ver isso.