- 浏览: 913417 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
运行时绑定也叫动态绑定,它是一种调用对象方法的机制。Java调用对象方法时,一般采用运行时绑定机制。
1.Java的方法调用过程
编译器查看对象的声明类型和方法名(对象变量的声明类型)。通过声明类型找到方法列表。
编译器查看调用方法时提供的参数类型。
如果方法是private、static、final或者构造器,编译器就可以确定调用那个方法。这是静态绑定。
如果不是上述情况,就要使用运行时(动态)绑定。
在程序运行时,采用动态绑定意味着:虚拟机将调用对象实际类型所限定的方法。
public class Father {
2.运行时(动态)绑定的过程
虚拟机搜索方法签名;
调用方法。
注意,这里说的是对象的实际类型。即在多态的情况下,虚拟机可以找到所运行对象的真正类型。
3.在向上转型情况下的动态绑定示例
Java代码
public class Father {
public void method() {
System.out.println("父类方法,对象类型:" + this.getClass());
}
}
public class Son extends Father {
public static void main(String[] args) {
Father sample = new Son();//向上转型
sample.method();
}
}
结果1:
父类方法,对象类型:class samples.Son
这个结果没有疑问,声明的是父类的引用(句柄),但准确的调用了子类的对象,调用method,在子类中没有该方法,所以去父类中寻找到并调用之。
现在修改子类,重写(override)method方法。
Java代码
public class Son extends Father {
public void method() {
System.out.println("子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();//向上转型
sample.method();
}
}
public class Son extends Father {
public void method() {
System.out.println("子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();//向上转型
sample.method();
}
}
结果2:
子类方法,对象类型:class samples.Son
这个结果也是意料之中的。调用method时,在子类中寻找到了该方法,所以直接调用之。
4.静态绑定成员变量
在处理Java类中的成员变量时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以“找到”子类,而对象的属性还是父类的属性。
现在再进一步变化,在父类和子类中同时定义和赋值同名的成员变量name,并试图输出该变量的值。
Java代码
protected String name="父亲属性";
public void method() {
System.out.println("父类方法,对象类型:" + this.getClass());
}
}
public class Son extends Father {
protected String name="儿子属性";
public void method() {
System.out.println("子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();//向上转型,new Son() 时候是先构造父类的
System.out.println("调用的成员:"+sample.name);
}
}
结果3:
调用的成员:父亲属性
这个结果表明,子类的对象(由父类的引用handle)调用到的是父类的成员变量。所以必须明确,运行时(动态)绑定针对的范畴只是对象的方法。
现在试图调用子类的成员变量name,该怎么做?最简单的办法是将该成员变量封装成方法getter形式。
Java代码
public class Father {
protected String name = "父亲属性";
public String getName() {
return name;
}
public void method() {
System.out.println("父类方法,对象类型:" + this.getClass());
}
}
public class Son extends Father {
protected String name="儿子属性";
public String getName() {
return name;
}
public void method() {
System.out.println("子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();//向上转型
System.out.println("调用的成员:"+sample.getName());
}
}
结果4:
调用的成员:儿子属性
总结:属性不能被虚拟调用,因为他不能被重写,而方法可以,它被对象的真实类型调用。
发表评论
-
maven 在Mac OS下运行的问题总结
2014-05-16 17:24 819在maven下生成基本的项目结构。 生成eclipse项 ... -
【zz】 java函数参数类型后添加三点的用法
2012-07-02 09:48 1042今天看到一个没见过的函数参数列表test(int... a), ... -
【zz】Java编码的理解和Java加载器的理解
2012-06-08 15:59 745一,我对java中编码的理解1. 编码的产生 对电脑而言 ... -
类加载器入门级应用
2012-06-08 15:17 9201、类加载器负责加载 Ja ... -
ClassLoader详解
2012-06-08 14:23 1238Point One 将J2EE应用程序移植到W ... -
Java静态代理与动态代理
2012-05-29 10:32 934JAVA的静态代理与动态代 ... -
JDK的动态代理深入解析(Proxy,InvocationHandler)(转)
2012-05-29 10:31 5179调用处理器InvocationHandle ... -
zz 动态反射实现AOP的简单原理
2012-05-28 17:46 892其实AOP的意思就是面向切面编程. OO注重的是我们 ... -
理解Java枚举在单例模式的应用
2012-06-05 15:50 12685.3.9 单例和枚举 按照《高效Java 第二版》中的说 ... -
Java 枚举的介绍
2012-05-23 16:50 0一、使用简单程序完成枚举的功能 例:使用简单类完成枚举操作 ... -
枚举类型的用法
2012-06-05 15:50 1424DK1.5引入了新的类型——枚举。在 Java 中它虽然算 ... -
单例模式的七种写法 (包括1.5新特性)
2012-05-23 16:18 0第一种(懒汉,线程不安全): <!--<br / ... -
重写hashCode方法的意义
2012-05-23 16:01 1636Java中的很多对象都override了equ ... -
JDK Log的设计思想
2012-05-23 14:39 1305最近在看《Agile Java》,看到日志一节,收获颇多,所以 ... -
[zz] Synchronized和Static Synchronized区别
2012-05-23 14:07 775通过分析这两个用法的分析,我们可以理解java中锁的概念。一 ... -
双精度、单精度的有效位数
2012-05-22 17:25 5093浮点数7位有效数字。(应该是单精度数) 双精度数16位有效 ... -
DecimalFormat 使用方法
2012-05-22 16:44 1019我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Ja ... -
Java Applet 无法运行的一个问题
2012-04-28 15:09 2526当你用JDK1.6开发出的新功能,在JDK1.6上re ... -
JDK1.5之中的Map相关的类
2012-04-26 10:14 1854java5的java.util包提供了大量集合类。其中最常用的 ... -
设计模式应用场景总结
2012-04-11 16:47 1259在J2EE的开发和测试中,其实不知不觉已经使用了许多设计模式。 ...
相关推荐
java实现对echarts 属性全动态设置 数据动态绑定。封装echarts 的绘图方法,使得js只需要getLine(data),getBar(data)等就可以绘制图形。echarts上的所有属性都可以在java中设置。
通过在Java类上添加注解,JAXB可以自动地将XML文档解析为Java对象,同时也能将Java对象转换为XML文档。例如,使用`@XmlRootElement`注解标记一个类作为XML根元素,`@XmlElement`注解将类的属性映射到XML元素。 2. ...
- 在使用Java绑定XML技术时,首先需要定义XML Schema(XSD),该Schema描述了XML文档的结构和约束条件。 - 接下来,使用工具如XJC(XSD to Java Compiler)自动生成对应的Java类,这些Java类与XML Schema中的元素...
Java和XML数据绑定是将XML文档中的数据与Java对象模型之间建立映射关系的技术,使得开发者可以方便地在XML和Java对象之间进行数据交换。这项技术对于处理XML数据的Java应用来说至关重要,尤其是在Web服务、配置文件...
JavaFX 是一种新的 Java 技术,用于处理动态画面,画面精美令人赞叹。了解 JavaFX 的属性和绑定是非常重要的。 JavaFX 的属性是基于 JavaBean 的模式,但做了扩展和改进。JavaFX 的属性经常通过绑定来综合,这是一...
“WPF 双向绑定到非公开 set 方法属性在 .NET 45 和 .NET Core 行为的不同”这个标题涉及到的是Windows Presentation Foundation (WPF) 中的一个特定技术问题,即双向数据绑定。双向数据绑定是WPF中一种强大的特性,...
在Java的Spring框架中,属性参考和自动绑定是两个重要的概念,它们为开发者提供了灵活且强大的依赖注入机制。本文将深入解析这两个概念,并通过示例代码来阐述其工作原理。 ### Spring属性参考 在Spring中,属性...
Castor框架支持自动生成XML文档的格式,只要Java对象遵循JavaBean规范,即包含公共getter和setter方法来访问和修改属性。这意味着开发者无需手动编写XML schema或配置文件,Castor就能根据对象的结构生成相应的XML...
1. **EasyUI组件与Knockout.js结合**:EasyUI的控件可以绑定到Knockout的数据模型上,例如,可以将`<select>`的`value`属性绑定到模型的一个属性,这样在选择项改变时,模型中的数据也会自动更新。 2. **数据绑定**...
- 这样可以使用父类引用操作子类对象,实现方法的动态绑定,提高代码的灵活性和扩展性。 9. **super关键字** - `super`关键字用于引用当前对象的父类实例,可以调用父类的构造器、方法和字段。 - 例如,`super....
总之,Java反射为开发者提供了强大的功能,可以灵活地操作类和对象,实现运行时的动态绑定。通过反射,我们可以获取类的属性、方法信息,并且能够处理List集合类,进行动态的实例化、调用方法和修改属性等操作。然而...
Castor是一款强大的Java库,它提供了Java对象到XML数据的...总的来说,Castor插件提供了一种高效的方法来处理XML数据,通过自动绑定和对象生成,极大地提升了开发效率。在处理大量XML数据时,它是一个非常实用的工具。
多态性是指一个对象可以被当做不同的类型来对待,动态绑定是指在运行时确定对象的类型。多态性和动态绑定是Java语言中非常重要的机制,它们可以使得代码更加灵活和可扩展。 六、Object类中的方法 Object类是Java...
在这个场景下,我们主要讨论如何利用iReport创建动态模板,以及如何通过JSP和Java代码来调用这些模板实现热敏单的打印。 首先,我们需要了解iReport的基本使用。iReport允许开发者设计复杂的报表布局,包括表格、...
继承是 Java 中的一种机制,允许子类继承父类的属性和方法,並且可以对父类的方法进行重写或重载。动态绑定是指在运行时确定方法的调用,而不是在编译时。多态性是通过继承和方法重写来实现的。 一、继承 继承是 ...
它是将Java对象的属性映射到SQL数据库的表、列上的过程,类似于XML数据绑定,只是数据交换的媒介由XML文档替换为SQL数据库。在XML数据绑定中,编组器将Java对象的数据写入XML文档,解组器则从XML文档中提取数据填充...