首先,存在一些从来不能使用动态绑定的情况。
- 静态方法:不管这个办法怎么被调用
- 最终方法
- 私有方法(因为它们只能从类的内部被调用,因此是隐式的最终方法)
动态绑定意味着:目前正在调用的方法正是最适用于要操作对象的那个方法。然而它并不意味着对所有的参数都执行最佳匹配。
在Java中,一个方法的参数在编译阶段常被静态地绑定。一个例子:
class Base{
public void foo(Base x){
System.out.println("Base.Base");
}
public void foo(Derived x){
System.out.println("Base.Derived");
}
}
class Derived extends Base{
public void foo(Base x){
System.out.println("Derived.Base");
}
public void foo(Derived x){
System.out.println("Derived.Derived");
}
}
class Main{
public static void whichFoo(Base arg1, Base arg2){
arg1.foo(arg2);
}
public static void main(String[] args)}{
Base b = new Base();
Derived d = new Derived();
whichFoo(b,b);
whichFoo(b,d);
whichFoo(d,b);
whichFoo(d,d);
}
}
因为
参数通常在编译阶段被匹配,在whichFoo方法中,形式参数arg2的类型是Base, 因此不管arg2实际引用的是什么类型,arg1.foo(arg2)匹配的foo都将是:
public void foo(Base x)
惟一的问题在于用Base还是Derived版本中的foo(Base x)函数?当知道arg1引用的对象时,
这是在运行阶段要决定的。精确使用的方法是
编译器绑定,在编译阶段,最佳方法名依赖于参数的静态和控制引用的静态类型所适合的方法。在这一点上,设置方法的名称,这一步叫
静态重载。
决定方法是哪一个类的版本,这通过由虚拟机推断出这个对象的
运行时类型来完成,一旦知道运行时类型,虚拟机就唤起继承机制,寻找方法的最终版本。这叫做
动态绑定。
在方法whichFoor的调用arg1.foo(arg2),将根据arg1的运行时类型是Base还是Derived来调用Base类或者Derived类中的foo(Base x)版本函数。
由此理解方法的
覆盖和
重载。重载函数的实际调用版本由编译器绑定决定,而覆盖函数的实际调用版本由动态绑定决定。
分享到:
相关推荐
本实例是关于如何将`Sql2000`数据库中的数据与`JComboBox`进行动态绑定,通过`JDBC`(Java Database Connectivity)接口来实现数据库连接和数据交互。 首先,我们需要理解`JComboBox`的基本用法。`JComboBox`是...
在Java环境中,为了利用ZeroMQ的功能,通常需要通过Java绑定来实现,这就是所谓的“ZeroMQ及Java绑定”。 首先,ZeroMQ的核心是libzmq.dll,这是一个动态链接库,它实现了ZeroMQ的所有底层功能。在Windows系统中,...
Java与XML数据绑定是将Java对象与XML文档之间的映射关系进行自动化处理的一种技术,它极大地简化了在Java应用中处理XML数据的工作流程。在Java世界中,JAXB(Java Architecture for XML Binding)是Java EE平台的一...
Java XML绑定技术极大地简化了XML文档的操作过程,使开发人员能够更加专注于业务逻辑而不是XML细节。JAXB、XMLBeans和Castor各有优势,选择哪个框架取决于具体的应用场景和个人喜好。无论哪种框架,都能有效提高开发...
XML与Java技术之间的一种高效交互方式是通过数据绑定来实现的,其中Castor是一个流行的开源框架。数据绑定允许开发者将XML文档直接映射到Java对象,反之亦然,从而简化了处理XML数据的过程。这种方式特别适合那些...
在Java编程领域,动态任务调用是一个重要的概念,它允许我们在程序运行时创建、查询、启动、调用和删除任务,极大地增强了程序的灵活性和可扩展性。在本篇文章中,我们将深入探讨Java中的动态任务调度,特别是使用...
- 简化接口定义:jSegue通过自动生成JNI头文件和Java绑定类,减少了手动编写JNI代码的工作量。 - 易于使用:jSegue提供了直观的API,使得Java开发者可以像调用Java方法一样调用本地函数。 - 安全性:jSegue可能...
在Java中,多态性体现在两个方面:静态绑定(编译时绑定)和动态绑定(运行时绑定)。动态绑定是多态性实现的关键,它确保了程序在运行时能够根据实际的对象类型来调用相应的方法。 首先,我们来讨论类型转换。在...
Castor是一个开源的数据绑定框架,它允许Java开发者在Java对象和XML之间进行无缝转换。这个强大的工具能够将复杂的Java对象模型映射到XML文档,同时也能够将XML数据解析回等效的Java对象,极大地简化了Java应用中的...
语义推理的功能组件动态绑定是现代软件开发中的一个重要研究领域,尤其在Web服务和面向服务架构(SOA)中占据核心地位。随着软件系统变得越来越复杂,基于组件的软件开发(CBSD)成为提高代码复用性和灵活性的有效...
Tomcat是Apache软件基金会的一个开源项目,它是一个轻量级的应用服务器,主要用于处理Java Servlet和JavaServer Pages(JSP)。当我们需要让多个网站或者应用在同一台服务器上运行时,就需要通过域名绑定来区分它们...
#### 三、Java开发细节 除了上述提到的JavaScript注意事项外,在Java开发过程中,还需要关注以下几点: 1. **类型转换:** 在进行基本类型的转换时(如`byte`到`short`、`int`到`long`),要特别小心,确保转换...
### Java调用JS代码实现动态配置 在现代软件开发中,动态配置的需求越来越普遍,特别是在不希望频繁重启服务的情况下更新业务逻辑或算法时。本文将详细介绍如何利用Java调用JavaScript来实现这一目标,并通过一个...
《深入解析Java本地代码绑定工具jSegue》 在软件开发过程中,有时我们需要将Java代码与本地(Native)代码集成,以便利用C、C++等语言的高性能特性或调用特定平台的功能。Java本地接口(JNI)是Java平台提供的一种...
3. invokedynamic指令:这是Java 7引入的一个新字节码指令,用于动态语言支持,允许在运行时动态绑定方法调用,提高了脚本语言的性能。 4. 并发与多线程:Java SE 7提供了新的并发工具,如Fork/Join框架,用于解决...
然后,这些数据被传递给前端,而不是让Java直接处理PDF的渲染细节。 “使用Vue进行数据映射和页面渲染,符合前端开发思路,前后分离”这部分表明我们利用Vue.js这个流行的JavaScript框架来处理前端部分。Vue.js擅长...
本资源是一个Java游戏服务器热更新的示例项目,采用PID绑定的方式实现无停机更新。通过将服务器进程与特定PID绑定,可以在不中断服务的情况下替换旧版本文件为新版本文件,从而实现热更新。这种方式可以有效减少...
通过使用Spring MVC的数据绑定机制,开发者可以更加专注于业务逻辑的实现,而不是繁琐的数据处理细节。因此,在实际开发中,合理运用数据绑定能够提高开发效率,降低出错概率,是构建高效企业级应用的必备技能。