• 静态绑定与动态绑定


    静态绑定

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

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

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

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

  • 相关阅读:
    iMac中的GoLand中报错: Unresolved reference 错误解决方法
    设置初次ssh登录linux的时候无需yes确认登陆
    docker命令常用总结
    阿里巴巴-菜鸟网络高级java开发工程师/技术专家招聘
    mysql8.0.22 设置sql_mode后不能启动解决
    《事实》读后感
    VPS是什么?
    做了一个小程序,欢迎关注
    [Linux] Tomcat java.lang.OutOfMemoryError: Java heap space
    [Linux] Nginx 反向代理配置 http headers 带下划线fields转发
  • 原文地址:https://www.cnblogs.com/liangyueyuan/p/10123644.html
Copyright © 2020-2023  润新知