除了 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 中,klass 调用了MyClass2
该类的方法。在这里,我使用了一个适合每个覆盖和重载(同时)方法的参数。为什么类对象总是从MyClass
类中调用方法?
4. 这是正常的。完全没有问题。
5. 抛出异常是对的。klass 对象没有这种带双参数的方法。但是,为什么不从MyClass2
类中调用方法,就像在问题 1 中发生的那样?