方法重载使用编译时多态技术。方法覆盖使用运行时多态技术。
方法重载:
如先前的回答所述,java不支持具有不同返回类型和相同参数的方法重载。 这是因为,它必须确定在编译时本身使用哪种方法。 为了消除歧义,他们设计了这样的方法重载技术。
如果我们确实需要使用不同类型和相同参数的方法重载,则在某种程度上可以通过方法重载来实现。
方法覆盖:
方法覆盖使用运行时多态技术。 因此,要执行的方法不是在编译时决定的,而是由JVM在运行时决定的。
使用协变量返回类型,我们可以在子类的方法中具有与基类相同的参数的不同返回类型。
协变量返回类型的示例:
class BaseClass {
BaseClass dosomething(){
System.out.println("Print BaseClass");
return this;
}
}
class AnotherBaseClass extends BaseClass {
@Override
BaseClass dosomething(){
System.out.println("Print AnotherBaseClass");
return this;
}
}
class SubClass extends AnotherBaseClass {
@Override
SubClass dosomething(){ /*Here SubClass is co-vairantreturn type*/
System.out.println("Print SubClass");
return this;
}
public static void main(String args[]){
SubClass s1 = new SubClass();
s1.dosomething();
}
}
输出:
打印子类