多态时方法的调用问题

多态时方法调用问题:
前提
:必须存在多态情况
存在父类:SuperClass,子类SubClass,方法doWork
---------------------
测试代码:
SuperClass  clz  =  new  Subclass();//多态
clz.doWork();//???



情况1:doWork方法存在于SuperClass中,不存在于SubClass中

多态时方法的调用问题_第1张图片

此时执行结果:编译通过,执行SuperClass的doWork方法
     应该先从SubClass类中去找doWork方法,找不到,再去父类SuperClass类中找




情况2:doWork方法存在于SubClass中,不存在于SuperClass中

多态时方法的调用问题_第2张图片

此时执行结果:编译错误
     编译时期,会去编译类型(SuperClass)中找是否有doWork方法
     找   到:编译通过
     找不到:编译报错




情况3:doWork方法存在于SuperClass和SubClass中

多态时方法的调用问题_第3张图片

此时执行结果:编译通过,执行SubClass的doWork方法

   在运行时期,调用运行类型(SubClass)中的方法




情况4:doWork方法存在于SuperClass和SubClass中,但是doWork是静态方法
 此时这种情况,称之为隐藏,而不是方法覆盖

多态时方法的调用问题_第4张图片
此时执行结果:编译通过,执行SuperClass的doWork方法
   静态方法的调用只需要类即可
   若使用对象来调用静态方法,其实使用的是对象的编译类型来调用静态方法,和对象没有关系

你可能感兴趣的:(java)