Dziedziczenie Java (zastępowanie i przeciążanie metody)
Poza tym dziedziczenie Java jest podstawową cechą języka, mam kilka pytań.
Oto źródło mojego przykładu testowego:
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!)
}
}
Mam następujące pytania:
1. Obiekt klass jest instancjąMyClass
. Dlaczego wykonuje metodę zMyClass2
klasa?
2,3. Na pytanie 1 klass nazywa metodęMyClass2
klasa. Tutaj użyłem parametru, który pasuje do każdej z przesłoniętych i przeciążonych (jednocześnie) metod. Dlaczego obiekt klass zawsze wywołuje metodę zMyClass
klasa?
4. To normalne. Bez wątpienia.
5. Dobrze jest rzucić wyjątek. Obiekt klass nie ma tej metody z podwójnym parametrem. Ale dlaczego nie nazywa się go metodą zMyClass2
klasa, tak jak to miało miejsce w pytaniu 1?