Java-多态时方法调用问题

  • 内容
  • 评论
  • 相关

多态时方法调用问题:

前提:必须先存在多态情况:

存在父类:SuperClass,子类:SubClass,方法:doWork.

--------------------------------------------------------------------

测试代码:

 SuperClass clz =  new   SubClass();//多态

 clz.doWork();//???输出什么结果

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

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

应该先从SubClass类中去找doWork方法,找不到,再去父类SuperClass类中找.

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

此时执行结果: 编译错误.

编译时期,会去编译类型(SuperClass)中找是否有doWork方法:

找    到:编译通过.

找不到:编译报错.

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

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

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

情况4: doWork方法存在于SuperClass和SubClass中,但是doWork是静态方法.

此时这种情况,我们称之为隐藏,而不叫方法覆盖.

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

静态方法的调用只需要类即可.

如果使用对象来调用静态方法,其实使用的是对象的编译类型来调用静态方法.

和对象没有关系.

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注