码迷,mamicode.com
首页 > 其他好文 > 详细

静态绑定与动态绑定

时间:2018-12-15 16:20:42      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:分析   nal   bind   extend   end   nbsp   super   类型信息   src   

静态绑定

   静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的,在编译的时候就可以连接到类的中,定位到这个方法。

   在Java中,final、private、static修饰的方法以及构造函数都是静态绑定的,不需程序运行,不需具体的实例对象就可以知道这个方法的具体内容。

~举个栗子

//静态绑定
public class binding {
       public static class superclass{
           static void print(){
               System.out.println("print in superclass");
           }
       }
       public static class subclass extends superclass{
           static void print(){
               System.out.println("print in subcalss");
           }
       }
       
       public static void main(String[] args) {
        superclass A = new superclass();
        superclass B = new subclass();
        A.print();
        B.print();
    }
    }

~运行结果

技术分享图片

~分析说明

   在java中,允许子类重写父类的方法,但是,在这里的方法是静态的,即在编译期间虚拟机已经加载了该方法,并且进行了相关的绑定,知道了该方法不可以被重写,所以,当子类去调用方法的时候只会调用父类的方法

动态绑定

  动态绑定(后期绑定)是指:在程序运行过程中,根据具体的实例对象才能具体确定是哪个方法。

~举个栗子

public class Test9 {

    public static class superclass{
            void print(){
               System.out.println("print in superclass");
           }
       }
       public static class subclass extends superclass{
            void print(){
               System.out.println("print in subcalss");
           }
       }
       
       public static void main(String[] args) {
        superclass A = new superclass();
        superclass B = new subclass();
        A.print();
        B.print();
    }
}

~运行结果

 技术分享图片

~分析说明

 这种就是java中的重写操作,子类的覆盖了父类的同名方法,当子类对象在调用的之前,并不会知道它自己要调用的是哪个方法,只有等到运行时才能确定

总结

  private、final、staic成员(方法和变量)使用静态绑定,而对于动态绑定是在运行时基于进行时对象完成的。

  静态绑定使用类型信息进行绑定,而动态绑定使用对象来解析绑定。

  在使用动态绑定(即进行时)的重写方法时,使用静态绑定解析重载方法。

静态绑定与动态绑定

标签:分析   nal   bind   extend   end   nbsp   super   类型信息   src   

原文地址:https://www.cnblogs.com/liangyueyuan/p/10123644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!