java的前期绑定和后期绑定使用示例

 更新时间:2014年02月07日 11:14:10   作者:  
java的前期绑定在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用

后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定。实现后期绑定,需要某种机制支持,以便在运行时能判断对象的类型,调用开销比前期绑定大。
Java中的static方法和final方法属于前期绑定,子类无法重写final方法,成员变量(包括静态及非静态)也属于前期绑定。除了static方法和final方法(private属于final方法)之外的其他方法属于后期绑定,运行时能判断对象的类型进行绑定。验证程序如下:

复制代码 代码如下:

class Base
{
    //成员变量,子类也有同样的成员变量名
    public String test="Base Field";
    //静态方法,子类也有同样签名的静态方法
    public static void staticMethod()
    {
        System.out.println("Base staticMethod()");
    }
    //子类将对此方法进行覆盖
    public void notStaticMethod()
    {
        System.out.println("Base notStaticMethod()");
    }

}
public class Derive extends Base
{
    public String test="Derive Field";
    public static void staticMethod()
    {
        System.out.println("Derive staticMethod()");
    }
    @Override
    public void notStaticMethod()
    {
        System.out.println("Derive notStaticMethod()");
    }
    //输出成员变量的值,验证其为前期绑定。
    public static void testFieldBind(Base base)
    {
        System.out.println(base.test);
    }
    //静态方法,验证其为前期绑定。
    public static void testStaticMethodBind(Base base)
    {
        //The static method test() from the type Base should be accessed in a static way
        //使用Base.test()更加合理,这里为了更为直观的展示前期绑定才使用这种表示。
        base.staticMethod();
    }
    //调用非静态方法,验证其为后期绑定。
    public static void testNotStaticMethodBind(Base base)
    {
        base.notStaticMethod();
    }
    public static void main(String[] args)
    {
        Derive d=new Derive();
        testFieldBind(d);
        testStaticMethodBind(d);
        testNotStaticMethodBind(d);
    }
}
/*程序输出:
Base Field
Base staticMethod()
Derive notStaticMethod()
 */

相关文章

  • java实现简单租车系统

    java实现简单租车系统

    这篇文章主要为大家详细介绍了java实现简单租车系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • IDEA中的Structure模块使用图文详解

    IDEA中的Structure模块使用图文详解

    IDEA 的 Structure 功能,也是在看代码中一个十分常用的功能,最通用的方法,就是点击 IDEA 左下角的 Structure 标签页即可,本文重点介绍IDEA中的Structure模块使用详解,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • 如何使用lamda表达式对list进行求和

    如何使用lamda表达式对list进行求和

    这篇文章主要介绍了如何使用lamda表达式对list进行求和问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 实例讲解Java并发编程之变量

    实例讲解Java并发编程之变量

    这篇文章主要介绍了实例讲解Java并发编程之变量,本文讲解了编写线程安全需要关心的共享变量和可变变量,需要的朋友可以参考下
    2015-04-04
  • springboot使用filter获取自定义请求头的实现代码

    springboot使用filter获取自定义请求头的实现代码

    这篇文章主要介绍了springboot使用filter获取自定义请求头的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Eclipse中Debug时鼠标悬停不能查看变量值解决办法

    Eclipse中Debug时鼠标悬停不能查看变量值解决办法

    这篇文章主要介绍了Eclipse中Debug时鼠标悬停不能查看变量值解决办法,以及分享了一个简单补全代码的方法,还是比较不错的,需要的朋友可以参考下。
    2017-11-11
  • Java设计模式之策略模式示例详解

    Java设计模式之策略模式示例详解

    这篇文章主要为大家详细介绍了Java的策略模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 详解Java如何实现一个优秀的散列表

    详解Java如何实现一个优秀的散列表

    这篇文章主要通过简单的示例为大家详细介绍了在Java中如何实现一个优秀的散列表,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2023-07-07
  • SpringBoot集成MinIO的示例代码

    SpringBoot集成MinIO的示例代码

    对象存储服务OSS是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件,这篇文章主要介绍了SpringBoot集成MinIO的示例代码,需要的朋友可以参考下
    2023-06-06
  • Java中的System类、BigInteger类和BigDecimal类详解

    Java中的System类、BigInteger类和BigDecimal类详解

    这篇文章主要介绍了Java中的System类、BigInteger类和BigDecimal类详解,arraycopy()方法,复制数组元素,比较适合底层调用,一般使用Arrays.copyOf()完成复制数组,需要的朋友可以参考下
    2023-09-09

最新评论