Java-Vererbung (Überschreiben und Überladen von Methoden)

Abgesehen davon, dass die Java-Vererbung ein grundlegendes Merkmal der Sprache ist, habe ich einige Fragen.
Hier ist die Quelle für mein Testbeispiel:

class MyClass{

    public void say(String t){
        System.out.println("Hello MyClass "+t);
    }

    public void print(MyClass t){
        System.out.println("MyClass is printed");
    }

    public void anotherPrint(int i){
        System.out.println("MyClass is printed again");
    }
}

class MyClass2 extends MyClass{

    public void say(String t){
        System.out.println("Hello MyClass2 "+t);
    }

    public void print(MyClass2 t){
        System.out.println("MyClass2 is printed");
    }

    public void anotherPrint(double i){
        System.out.println("MyClass2 is printed again");
    }
}

public class HelloWorld{

    public static void main(String []args){
        MyClass klass = new MyClass2();

        klass.say("h"); //Question 1 (Prints: "Hello MyClass2 h")

        klass.print(new MyClass2()); //Question 2 (Prints: "MyClass is printed")
        klass.print(new MyClass()); //Question 3 (Prints: "MyClass is printed")

        klass.anotherPrint(1); //Question 4 (Prints: "MyClass is printed again")
        klass.anotherPrint(1.0); //Question 5 (Throws Exception!)
    }
}

Ich habe folgende Fragen:

1. Das klass-Objekt ist eine Instanz vonMyClass. Warum wird die Methode von der ausgeführt?MyClass2 Klasse?

2,3. Bei Frage 1 nennt klass die Methode derMyClass2 Klasse. Hier habe ich einen Parameter verwendet, der zu jeder der überschriebenen und überladenen (gleichzeitig) Methoden passt. Warum klass Objekt ruft immer die Methode von derMyClass Klasse?

4. Es ist normal. Gar keine Frage.

5. Es ist richtig, eine Ausnahme auszulösen. Das klass-Objekt hat diese Methode nicht mit double-Parametern. Aber warum heißt es nicht die Methode aus demMyClass2 Klasse, so wie es bei Frage 1 passiert ist?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage