Java静态方法不具有多态性详解

 更新时间:2016年06月02日 16:57:43   投稿:jingxian  
下面小编就为大家带来一篇Java静态方法不具有多态性详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

动态绑定机制使得基类的引用能够指向正确的子类对象,从而使得面向基类编程成为可能。

然而动态绑定在以下两种情况会失效。

1、基类方法是private或final修饰的

这个很好理解,因为private说明该方法对子类是不可见的,子类再写一个同名的方法并不是对父类方法进行复写(Override),而是重新生成一个新的方法,也就不存在多态的问题了。同理也可以解释final,因为方法同样是不可覆盖的。

2、方法是static修饰的

代码如下所示.

class Base {
  public static void staticMethod() {
    System.out.println("Base staticMehtod");
  }

  public void dynamicMehtod() {
    System.out.println("Base dynamicMehtod");
  }
}

class Sub extends Base {
  public static void staticMethod() {
    System.out.println("Sub staticMehtod");
  }

  public void dynamicMehtod() {
    System.out.println("Sub dynamicMehtod");
  }
}

public class TJ4 {
  public static void main(String args[]) {
    Base c = new Sub();
    c.staticMethod();
    c.dynamicMehtod();
  }
}/* OutPut:
 Base staticMehtod
 Sub dynamicMehtod
 */

输出结果并不像设想的那样,输出 "Sub staticMehtod"。因为静态方法是与类而不是与某个对象相关联,c.staticMethod();等同于Car.staticMethod(); 所以尽量不要使用实例变量去调用静态方法,避免混淆。

以上这篇Java静态方法不具有多态性详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC 传日期参数到后台的实例讲解

    SpringMVC 传日期参数到后台的实例讲解

    下面小编就为大家分享一篇SpringMVC 传日期参数到后台的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java8新特性之默认方法和静态方法

    Java8新特性之默认方法和静态方法

    这篇文章主要给大家介绍了关于Java8新特性之默认方法和静态方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java中Spring WebSocket详解

    Java中Spring WebSocket详解

    本篇文章主要通过代码给大家详细分析了Java中Spring WebSocket的用法,需要的读者们参考学习下吧。
    2017-12-12
  • java实现二维码扫码授权登陆

    java实现二维码扫码授权登陆

    这篇文章主要为大家详细介绍了java实现二维码扫码授权登陆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 关于@Component注解的含义说明

    关于@Component注解的含义说明

    这篇文章主要介绍了关于@Component注解的含义说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringMVC学习之JSON和全局异常处理详解

    SpringMVC学习之JSON和全局异常处理详解

    在项目上线之后,往往会出现一些不可预料的异常信息,对于逻辑性或设计性问题,开发人员或者维护人员需要通过日志,查看异常信息并排除异常,这篇文章主要给大家介绍了关于SpringMVC学习之JSON和全局异常处理的相关资料,需要的朋友可以参考下
    2022-10-10
  • UrlDecoder和UrlEncoder使用详解_动力节点Java学院整理

    UrlDecoder和UrlEncoder使用详解_动力节点Java学院整理

    这篇文章主要为大家详细介绍了UrlDecoder和UrlEncoder使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • SpringBoot集成Redis实现验证码的简单案例

    SpringBoot集成Redis实现验证码的简单案例

    本文主要介绍了SpringBoot集成Redis实现验证码的简单案例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java经典排序算法之插入排序代码实例

    Java经典排序算法之插入排序代码实例

    这篇文章主要介绍了Java经典排序算法之插入排序代码实例,插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,需要的朋友可以参考下
    2023-10-10
  • 利用logback 设置不同包下的日志级别

    利用logback 设置不同包下的日志级别

    这篇文章主要介绍了利用logback 设置不同包下的日志级别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论