zoukankan      html  css  js  c++  java
  • 静态绑定与动态绑定

    静态绑定

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

       在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成员(方法和变量)使用静态绑定,而对于动态绑定是在运行时基于进行时对象完成的。

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

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

  • 相关阅读:
    List of XML and HTML character entity references
    Windows 如何查看端口占用情况?
    input placeholder文字垂直居中(Mobile & PC)
    使用CSS3改变选中元素背景色
    登录远程SQL服务器
    写了一个简洁的删除重复行的case
    自动驾驶中的计算机视觉
    ImageNet图像分类大赛
    在IDEA中使用MyBatis Generator逆向工程生成代码
    利用浏览器LocalStorage缓存图片,视频文件
  • 原文地址:https://www.cnblogs.com/liangyueyuan/p/10123644.html
Copyright © 2011-2022 走看看