Warum die Override Annotation

Warum benutzen wir die @Override Annotation in Java?

Um auf diese Frage zu Antworten versuchen wir erstmal im volgenden Beispiel die "public boolean equals(Object type)" Methode von der Object Klasse zu overriden:

public class Price {
    private int amount;
    public Price(int amount){
        this.amount = amount;
    }
    public boolean equals(Price p){
        if(this.amount == p.amount){
            return true;
        }else { return false;}
    }
    public static void main(String[] args){
        Price p1 = new Price(9);
        Price p2 = new Price(7);
        Price p3 = new Price(9);
        System.out.println("p1 equals p2 is " + p1.equals(p2));
        System.out.println("p1 equals p3 is " + p1.equals(p3));
    }
}

Nach der Ausführung dieses Programs bekommen wir volgende Nachricht:

    p1 equals p2 is false
    p1 equals p3 is true

Lass uns jetzt die main Methode ändern

    public static void main(String[] args){
        Object p1 = new Price(9);
        Object p2 = new Price(7);
        Object p3 = new Price(9);
        System.out.println("p1 equals p2 is " + p1.equals(p2));
        System.out.println("p1 equals p3 is " + p1.equals(p3));
    }

Die Ausführung wird nun diesen Output zeigen:

    p1 equals p2 is false
    p1 equals p3 is false

Die 2 main Methoden sind ähnlich, der einzige Unterschied ist die Nutzung von Object als Typ für p1, p2 und p3 anstatt von Price. p1, p2 und p3 haben Price als dynamischer Typ und deswegen erwarten wir den Auruf der 'overriden' equals Methode. Unser Overriding ist aber falsch: die Price Klasse sollte einen Parameter von Typ 'Object' in der equals-Signatur haben, stattdessen hat sie das Typ 'Price' verwendet.

Falls wir @Override ober der equals(Price p) Methode geschrieben haben, wird der Compiler sich beschweren weil er mit unsere Overriding unzufrieden ist.

Warum die @Override Annotation - SAM Business Informatics