Java 学习笔记 (12) - 动态绑定
2007-05-27 22:43
363 查看
这里的绑定指的是对象和方法间的关联
绑定有两种形式静态绑定static-binding(早绑定early-binding)和动态绑定dynamic-binding(晚绑定late-binding,或运行时绑定runtime-binding)
静态绑定是在编译时绑定,而动态绑定是在运行时根据对象的实际情况来选择绑定父类或者是某个子类的方法
在执行效率上,静态绑定要优于动态绑定,但丧失了灵活性
在C++中,函数默认是静态绑定的(动态绑定需要声明virtual关键字,也就是虚函数),而Java中则是默认动态绑定
静态绑定很好理解我们的重点是动态绑定,下面是一个动态绑定的例子
class SuperClass ...{
public void show() ...{
System.out.println("Object of SuperClass!");
}
}
class ChildClass1 extends SuperClass ...{
public void show() ...{
System.out.println("Object of ChildClass1!");
}
}
class ChildClass2 extends ChildClass1 ...{
public void show() ...{
System.out.println("Object of ChildClass2!");
}
}
public class DynamicBind ...{
public static void main(String[] args) ...{
SuperClass[] s = ...{
new SuperClass(),new ChildClass1(), new ChildClass2()
};
for (int i = 0 ; i < 3 ; i++) ...{
s[i].show();
}
}
}
运行结果
Object of SuperClass!
Object of ChildClass1!
Object of ChildClass2!
在以上代码中,最后一行s[i].show();在程序运行时才动态地根据对象的类型决定要调用哪个类中的方法,具体实机制现细节,请参看上溯造型的相关知识 http://blog.csdn.net/nyzhl/archive/2007/06/03/1636658.aspx
另: private,static,final等关键字声明的方法都是静态绑定的
绑定有两种形式静态绑定static-binding(早绑定early-binding)和动态绑定dynamic-binding(晚绑定late-binding,或运行时绑定runtime-binding)
静态绑定是在编译时绑定,而动态绑定是在运行时根据对象的实际情况来选择绑定父类或者是某个子类的方法
在执行效率上,静态绑定要优于动态绑定,但丧失了灵活性
在C++中,函数默认是静态绑定的(动态绑定需要声明virtual关键字,也就是虚函数),而Java中则是默认动态绑定
静态绑定很好理解我们的重点是动态绑定,下面是一个动态绑定的例子
class SuperClass ...{
public void show() ...{
System.out.println("Object of SuperClass!");
}
}
class ChildClass1 extends SuperClass ...{
public void show() ...{
System.out.println("Object of ChildClass1!");
}
}
class ChildClass2 extends ChildClass1 ...{
public void show() ...{
System.out.println("Object of ChildClass2!");
}
}
public class DynamicBind ...{
public static void main(String[] args) ...{
SuperClass[] s = ...{
new SuperClass(),new ChildClass1(), new ChildClass2()
};
for (int i = 0 ; i < 3 ; i++) ...{
s[i].show();
}
}
}
运行结果
Object of SuperClass!
Object of ChildClass1!
Object of ChildClass2!
在以上代码中,最后一行s[i].show();在程序运行时才动态地根据对象的类型决定要调用哪个类中的方法,具体实机制现细节,请参看上溯造型的相关知识 http://blog.csdn.net/nyzhl/archive/2007/06/03/1636658.aspx
另: private,static,final等关键字声明的方法都是静态绑定的
相关文章推荐
- [原]Java程序员的JavaScript学习笔记(12——jQuery-扩展选择器)
- Java并发学习笔记(12)避免活跃度危险(死锁)
- Spring学习笔记(12.基于java的容器注解)
- Java学习笔记12(面向对象五:构造方法、this再探)
- 黑马程序员_JAVA 学习笔记25 WEB篇12
- Effective Java 学习笔记 (12)
- JAVA学习笔记12——super关键字+继承的内存分析+组合
- JAVA学习笔记(12)--类和对象 详解(一)
- 黑马程序员_学习笔记:12) 其他API:java.lang.Runtime、java.util.Math、java.util.Date、java.util. Calendar
- 你不知道的Java学习笔记12--String、StringBuffer、StringBuilder比较
- Java学习笔记12:使可变性最小化
- 黑马程序员之java学习笔记12
- 【Java学习笔记】基础知识学习12【Set接口的实现类】
- 09 12 15 JavaWeb 学习笔记
- Java学习笔记_12_File的建立和存储
- java学习笔记-设计模式12(组合模式)
- Java学习笔记 12 异常处理
- java学习笔记12--国际化
- 12. JAVA IO Part 3 (数据操作流、合并流、压缩流、回退流、字符编码) ----- 学习笔记
- java学习笔记12——IO流解析