Java多态性的困惑

EliiTryToLearn:

我正在阅读多态性,经过一番搜索之后,我对编译时和运行时多态性的区别感到困惑。

可以说我有一个ABC类和另一个扩展ABC的类,像DEF这样的类:

class ABC{
    public void myMethod(){
    System.out.println("Overridden Method");
   }
}

public class DEF extends ABC{
    public void myMethod(){
    System.out.println("Overriding Method");
    }
}

public static void main(String args[]){
   ABC obj = new DEF();
   obj.myMethod();
   }
}

如果我们希望能够将一个类替换为另一个类,该类执行相同的任务但以不同的方式进行,而又不必重新编译调用它们的类,那么方法是覆盖方法还是方法重载?

维克多:

我想你在问两件事

1)我正在阅读多态性,经过一番搜索之后,我对编译时和运行时多态性的区别感到困惑。

让我们分开这里的水...

在编译时,编译器将验证并将代码转换为字节码。在此阶段将解决静态方法的调用,因此您知道每次调用静态方法时,都会进行相同且唯一的实现。

运行时多态性是执行时发生的事情,以确定要选择的给定方法的实际实现。考虑到层次结构中的每个类都提供了这种“多态”方法的一种实现。在幕后,编译器使用称为后期绑定机制的东西完成了很多工作来存档

2)如果我们希望能够用另一个类替换一个类,该类执行相同的任务但以不同的方式,而不必重新编译调用它们的类,那么方法是覆盖方法还是方法重载?

实际上,您并不是说替换,而是inteads谈论扩展,那是您在一个类扩展另一个时所做的事情父类中a方法的实现可以在子类中覆盖重载与层次结构无关,是用不同的参数集编写相同的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章