1
resposta

os métodos de uma classe abstrata não deveriam ser abstratos ?

Fiquei bem confuso em relação a essa questão, achei que o resultado seria "não compila" já que o método void x na classe B não é abstrato


abstract class B {
    void x() {
        System.out.println(y());
    }
    Object y() { return "a"; }
}
abstract class C extends B {
    abstract String y();
}
class D extends C {
    String y() { return "b"; }
}
class A {
    public static void main(String[] args) {
        D d  = (D) (C) new D();
        d.x();
    }
}
1 resposta

Oioi Bruno, tudo certo?

Desculpe pela demora em obter retorno.

Na verdade, a característica mais marcante de uma classe abstrata é que ela não pode ser instanciada, e não que ela tem apenas métodos abstratos. Por exemplo: uma classe mãe (abstrata) pode ter um comportamento comum a todas as suas filhas. Por isso, não faz tanto sentido o método ser sobrescrito por todas as filhas da mesma forma, é mais fácil que ele seja definido na própria classe mãe, mesmo que ela seja abstrata.

Espero ter ajudado! Qualquer coisa estou por aqui :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!