【发布时间】:2013-05-06 01:16:45
【问题描述】:
我试图了解 java 中的动态方法调用,但无法理解为什么 java 不允许我从子类调用方法而不是超类的方法。
例如:
如果我有 2 个课程 Test 和 Test2。 Test2 继承类 Test
方法someFunction()在子类中被覆盖:
测试类
public class Test {
public Test(){
System.out.println("I am Test class constructor called with no values");
}
public void someFunction(){
System.out.println("I am some function belonging to Test Class");
}
}
和Test2类:
public class Test2 extends Test{
public Test2(){
System.out.println("Constructor of Test2 with no values");
}
public void somFunction(){
System.out.println("I am someFunction overridden in Test2");
}
}
所以当我尝试以这种方式实例化 Test 类时:
Test t1 = new Test2();
t1.someFunction(); // this should call Test2.someFunction()
我得到的输出是:
I am Test class constructor called with no values
Constructor of Test2 with no values
I am some function belonging to Test Class
所以我的问题是:
当我使用object t1 调用方法someFunction() 时,为什么它调用属于超类的方法而不是子类中的方法,即使我用子类初始化对象也是如此。
我一直认为动态调用以这种方式工作,即您初始化对象的类,该类的方法被调用,即基本上应该调用被覆盖的方法而不是父方法。
饭菜
【问题讨论】:
标签: java inheritance overriding method-invocation