Java の継承は言語の基本的な機能であることに加えて、いくつか質問があります。
私のテスト例のソースは次のとおりです。
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!)
}
}
次の質問があります:
1. klass オブジェクトは のインスタンスですMyClass
。なぜMyClass2
クラスからメソッドを実行するのですか?
2,3。質問 1 で、クラスはクラスのメソッドを呼び出しますMyClass2
。ここでは、オーバーライドされたメソッドとオーバーロードされた (同時に) メソッドのそれぞれに適合するパラメーターを使用しました。クラスオブジェクトが常にクラスからメソッドを呼び出すのはなぜMyClass
ですか?
4.正常です。質問はありません。
5. 例外をスローするのは正しい。klass オブジェクトには、double パラメーターを持つこのメソッドはありません。しかし、MyClass2
質問 1 で起こったように、クラスからメソッドが呼び出されないのはなぜですか?