Utilisation de méthodes «finales protégées» de superclasse pour conserver un code commun pour les sous-classes

Comme un (pédant) débutant programmeur Java, je voudrais savoir, est-ce une bonne pratique pour déplacer un bloc commun de code que toutes les sous-classes d'utilisation à un autre protégé (final) méthode dans la classe parent? Des tâches comme le remplissage des listes avec des valeurs communes, de la commune ou à des algorithmes de filtrage, etc...
Est-il bon d'utiliser protégé statique méthodes?

class A {
    protected final List<String> getVariants() {...}
    protected final List<String> filterResults(List<String> variants) {...}
}

class B extends A {
    public List<String> doSomethingUsefull() {
        List<String> commonVariants = getVariants();
        ...
        return filterResults(commonVariants);
    }
}

class C extends A {
    public void doSomethingUsefull() {
        List<String> commonVariants = getVariants();
        ...
        return filterResults(commonVariants);
    }

    public void doMoreUsefullThings() {
        List<String> commonVariants = getVariants();
        ...
        return filterResults(commonVariants);
    }
}

source d'informationauteur dmzkrsk