Bonjour, sur un livre de tests java voici un test

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
abstract class Bird {
    protected Bird() {
        System.out.print("Wow-");
    }
 
    private final void fly() {
        System.out.println("Bird");
    }
}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Pelican extends Bird {
    public Pelican() {
        System.out.print("Oh-");
    }
 
    protected void fly() {
        System.out.println("Pelican");
    }
 
    static void main(String[] args) {
        var chirp = new Pelican();
        chirp.fly();
    }
}
private final void fly() {System.out.println("Bird");} : cette méthode ne peut être appelée que depuis sa classe et ne peut pas être overridée dans une classe fille. Donc à quoi sert-elle ? et est-ce que private final est possible et ne soulève pas une erreur ?

dans la classe fille Pelican on a : protected void fly() { System.out.println("Pelican");}. Il semble justement que c'est un override de la méthode précédemment discutée. Ca ne soulève pas une erreur ?