Overriding Methods - Redefinição de metodos

Por favor … alguém saberia me explicar por qual motivo esse código não compila ?

 // primeira classe está no diretório "um"
 
 package um;
 
 public abstract class Pai {
   abstract void fazAlgo();
 }
 
 // classe Filha no diretorio "dois"
 
 package dois;
 
 public class Filha extends Pai {
 
   public static void main(String[] args) {
     Filha f = new Filha();
     f.fazAlgo();
   }
 
   public void fazAlgo() {
     System.out.println("Feito");
   }
 
 }

Penssei que fosse devido ao método na classe filho ser public, mas fiz o teste e não é …
Também não é devido à aquela instrução que o NetBeans coloca : @Override
Então o que é ? :roll:
Obrigado …

Altere a linha

abstract void fazAlgo();

por

public abstract void fazAlgo();

isso acontece porque a classe Filha não tem acesso ao método fazAlgo() da classe Pai.

:wink:

Qual o erro dá e onde?

Tá dando erro na linha que declara a classe Filha :

 public class Filha extends Pai {

O erro é :

Mas pera aí … acho que tá certo mesmo. O método dá classe filho nunca pode ser mais restrito que o da classe pai apenas pode ser mais aberto(menos restrito).

Mas o problema não é esse…
O problema é o Package. Como o método foi declarado na calsse pai como default o acesso para ele é feito apenas na mesma classe e no mesmo pacote, por isso a classe filho não consegue acessa-lo e por isso da pau.

abstract void fazAlgo();

Alguém me responsa é isso mesmo ?

O problema ta neste default ai mesmo, altera ele pra public se nao poder alterar avisa ai pra galera acha outra solução

É isso mesmo, você não pode fazer Overriding de um método que você não pode enxergar. O método abstrato tem de ser public ou protected.
:stuck_out_tongue:

Obrigado a todos pela ajuda ! :thumbup: