乐趣区

关于java:Java-后期绑定

绑定

绑定指的是一个办法调用与办法所在类 (办法主体) 关联起来

后期 & 动态 & 编译时绑定

  • 若在程序执行前进行绑定(如果有的话,由编译器和连贯程序实现),叫做后期 / 动态 / 编译时绑定后期绑定是面向过程语言中默认的绑定形式。

这么做意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的相对地址

  • 为何能将调用解析到将要被执行的代码的相对地址?因为后期绑定在程序运行前的编译期间就已将办法调用与办法主体关联起来了

然而在 OOP(Oriented-Object Programming)中,程序直到运行时才可能确定代码的地址,所以当音讯发送到一个泛化对象时,必须采纳其余机制

  • 办法调用机制,即在运行时判断对象的具体类型,从而调用失当的办法,找到正确的办法执行主体,前期绑定机制随编程语言的不同而有所不同,但无论如何都必须在对象中安置某种【类型信息】

前期 & 动静 & 运行时绑定

  • 面向对象程序设计语言应用了前期 / 动静 / 运行时绑定的概念

当向对象发送音讯时,被调用的办法的代码直到运行时能力确定,编译器确保被调用办法的存在,并对被调用参数和返回值执行类型查看(无奈提供此类保障的语言被称为是弱类型的),然而并不知道将要被执行的确切代码

为了执行前期绑定,Java 应用一小段非凡的代码来代替相对地址调用,这段代码应用在对象中存储的信息来计算方法体的地址。这样,依据这一小段代码的内容,每一个对象都能够具备不同的行为表现。当向一个对象发送音讯时,该对象就可能晓得这条音讯应该做些什么

  • 前期绑定在运行时依据具体对象类型进行绑定

Java 中 static 办法、final 办法 (private 办法属于 final 办法) 属于后期绑定,子类无奈重写 final 办法,成员变量 (包含动态 / 非动态) 也属于后期绑定,除了 static 和 final 之外的其余办法属于前期绑定

有了前期绑定,当向一个对象发送音讯时,即便波及向上转型,该对象也只晓得要执行什么样的正确行为

向上转型

  • 一个面向对象程序必定会在某处蕴含向上转型

upcasting,灵感来源于模型铸造的塑模动作,而向上 up 这个词来源于继承图的典型布局形式:通常基类在顶部,而导出类在其下部散开,因而,转型为一个基类就是在继承图中向上挪动,即【向上转型】,因为这正是将本人从必须晓得确切类型的限定中解放出来的要害

退出移动版