Din*_*esh 0 java inheritance overriding method-invocation
我试图在Java中调用Dynamic方法调用,而不能理解为什么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");
}
}
Run Code Online (Sandbox Code Playgroud)
和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");
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我尝试以这种方式实例化Test类时:
Test t1 = new Test2();
t1.someFunction(); // this should call Test2.someFunction()
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
I am Test class constructor called with no values
Constructor of Test2 with no values
I am some function belonging to Test Class
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:当我调用方法时someFunction()
,object t1
为什么它调用属于超类的方法而不是子类中的方法,即使我用子类初始化对象也是如此.
我一直认为动态调用曾经以这种方式工作,即用初始化对象的类,该类的方法被调用,即应该调用基本覆盖的方法而不是父方法.
迪内希
错字.
public void somFunction(){
应该
public void someFunction(){
正如leonbloy在评论中所说,如果在方法之前放置注释@Override,编译器将编译时检查它实际上是否覆盖了某些内容.因此,如果它的方法名称是拼写错误(或者如果它覆盖的方法更改签名)它将无法编译:
@Override public void somFunction(){ //compile time error
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5163 次 |
最近记录: |