Não funciona por vários motivos:
1- Se tiver declarado no mesmo arquivo então não pode ter duas classes como public;
2- O método private Object doStuff(ClasseFilho filho) não retorna nada;
3- A classe ClasseFilho é filha da classe ClassePai, porém a classe ClasseFilho não implementa o método protected abstract Object doStuff(ClassePai pai), logo deveria ser abstrata.
O código pra fazer isso funcionar seria:
public abstract class ClassePai {
protected abstract Object doStuff(ClassePai pai);
}
class ClasseFilho extends ClassePai {
private Object doStuff(ClasseFilho filho) {
return null;
}
protected Object doStuff(ClassePai pai){
return null;
}
}
Agora sim, as duas classes se estiverem no mesmo arquivo não são mais públicas (só uma delas), o método doStuff tá retornando alguma coisa (null) e vc tá sobrescrevendo o doStuff da classe pai, como você mesmo disse, você não estava implementado o método doStuff da ClassePai e a sua classe não era abistrata.
Um outro jeito de fazer funcionar é colocando o modificar abstract na segunda classe:
public abstract class ClassePai {
protected abstract Object doStuff(ClassePai pai);
}
abstract class ClasseFilho extends ClassePai {
private Object doStuff(ClasseFilho filho) {
return null;
}
}
[]'s
carisio