Java动态绑定来自于继承体现子类继承父类子类重新覆盖了父类的方法,就是动态绑定,以下举例:

动态绑定是在运行期间

动物类:

  1. /**
  2. * 创建一个动物类
  3. * @author Liudeli
  4. */
  5. public class Animal {
  6. /**
  7. * 此函数打印一句话,显示样式
  8. */
  9. public void showStyle() {
  10. System.out.println("Animal showStyle()...");
  11. }
  12. }

人类:

  1. /**
  2. * 定义一个人类
  3. * @author Liudeli
  4. */
  5. public class Person extends Animal{
  6. /**
  7. * 重写父类的 showStyle 方法
  8. */
  9. public void showStyle() {
  10. System.out.println("Person showStyle()...");
  11. }
  12. }

狗类:

  1. /**
  2. * 定义一个狗类
  3. * @author Liudeli
  4. */
  5. public class Dog extends Animal{
  6. /**
  7. * 重写父类 showStyle 方法
  8. */
  9. public void showStyle() {
  10. System.out.println("Dog showStyle()...");
  11. }
  12. }

测试程序:

  1. /**
  2. * 测试程序
  3. * @author Liudeli
  4. */
  5. public class Main {
  6. public static void main(String[] args) {
  7. // 当父类引用去实例化子类,会执行子类中的方法,这个过程就是动态加载
  8. Animal person = new Person();
  9. person.showStyle();
  10. Animal dog = new Dog();
  11. dog.showStyle();
  12. }
  13. }

运行结果:



静态绑定:

静态绑定是在编译期间

  1. /**
  2. * 定义动物类
  3. * @author Liudeli
  4. */
  5. class Animal {};
  6. /**
  7. * 定义人类继承动物类
  8. * @author Liudeli
  9. */
  10. class Person extends Animal {};
  11. /**
  12. * 定义够累继承动物类
  13. * @author Liudeli
  14. */
  15. class Dog extends Animal {};
  16. /**
  17. * 此类包含了执行父类子类
  18. * @author Liudeli
  19. */
  20. public class MyRun {
  21. public void showMethod(Animal animal) {
  22. System.out.println("Animal showMethod()...");
  23. }
  24. /**
  25. * 方法重载
  26. * @param dog
  27. */
  28. public void showMethod(Person person) {
  29. System.out.println("Person showMethod()...");
  30. }
  31. /**
  32. * 方法重载
  33. * @param dog
  34. */
  35. public void showMethod(Dog dog) {
  36. System.out.println("Dog showMethod()...");
  37. }
  38. }

测试程序:

  1. /**
  2. * 测试程序
  3. * @author Liudeli
  4. */
  5. public class Main {
  6. public static void main(String[] args) {
  7. MyRun myRun = new MyRun();
  8. myRun.showMethod(new Animal());
  9. myRun.showMethod(new Dog());
  10. myRun.showMethod(new Person());
  11. }
  12. }

运行结果:


其实在程序编译的时候就决定会使用 showMethod(Animal animal) {}方法,不管在运行的时候传入的实际对象是什么,还是会执行 showMethod(Animal animal) {}方法,Java重载是静态绑定的。

以上还有很多不足之处,还没有来得及完善,谢谢大家观看!!!!!!!


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,

刘德利CSDN博客, http://blog.csdn.net/u011967006

Java动态绑定与静态绑定的更多相关文章

  1. Java动态绑定和静态绑定-多态

    一.问题 Java方法调用过程中,Jvm是如何知道调用的是哪个类的方法?Jvm又是如何处理?   二.概念 a.当子类和父类(接口和实现类)存在同一个方法时,子类重写父类(接口)方法时,程序在运行时调 ...

  2. java动态绑定与静态绑定【转】

    程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定.静态绑定: 在程序执行前方法已经被绑定(也就是说在 ...

  3. 关于继承的基本知识,方法重写,final和abstract的使用, 动态绑定和静态绑定的知识

    一.继承: 涉及关键字: extends(继承) super final abstract 特点: 1.类与类之间可以用 XX是XX来描述 , 那么他们之间就存在继承关系.  2.Java中不支持多继 ...

  4. 深入理解C++的动态绑定和静态绑定【转】

    转自:http://blog.csdn.net/chgaowei/article/details/6427731 为了支持c++的多态性,才用了动态绑定和静态绑定.理解他们的区别有助于更好的理解多态性 ...

  5. c++动态绑定与静态绑定

    C++为了支持多态性,采用了动态绑定和静态绑定 相关概念: 对象的静态类型:对象在声明时采用的类型,编译时确定 对象的动态类型:目前所指对象的类型,在运行时确定 class B { } class C ...

  6. 再次探讨C++的动态绑定和静态绑定

    以前在学习C++的时候,对动态绑定和静态绑定的理解是:静态绑定是编译时决定的,非虚函数基本都是静态绑定:而动态绑定用于虚函数,是为了实现多态.这样理解没什么大的问题,但我一直疑惑的是,既然静态绑定可以 ...

  7. c++的动态绑定和静态绑定

    为了支持c++的多态性,才用了动态绑定和静态绑定. 1.对象的静态类型:对象在声明时采用的类型.是在编译期确定的. 2.对象的动态类型:目前所指对象的声明.在运行期决定.对象的动态类型可以更改,但是静 ...

  8. 【转】深入理解C++的动态绑定和静态绑定 & 不要重定义虚函数中的默认参数

    为了支持c++的多态性,才用了动态绑定和静态绑定.理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误.需要理解四个名词:1.对象的静态类型:对象在声明时采用的类型.是在编译期确定的.2 ...

  9. C++ 多态Polymorphism 介绍+动态绑定、静态绑定

    什么是多态? 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是一种物质的多种形态. 在专业术语中,多态是一种运行时绑定机制(run-time binding) ,通过 ...

随机推荐

  1. java链接FTP实现上传和下载

    FtpUtil.java import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStr ...

  2. go语言中通过http访问需要认证的api

    func main() { //生成client 参数为默认 client := &http.Client{} //生成要访问的url url := "https://api.XXX ...

  3. Android笔记:RelativeLayout

    RelativeLayout 又称作相对布局,也是一种非常常用的布局.和 LinearLayout 的排列规则不同,RelativeLayout 显得更加随意一些,它可以通过相对定位的方式让控件出现在 ...

  4. jQuery实现锚点滑动定位

    go=function(index){ var top = $('#caseNewGuide' + index).offset().top; $('html, body').animate({ scr ...

  5. Ubuntu dns

    在Ubuntu系统网络设备启动的流程中,会依赖/etc/network/interface的配置文件初始化网络接口,所以直接在/etc/network/interface之中配置好对应的dns服务器会 ...

  6. Python sum() 函数

    Python sum() 函数  Python 内置函数 描述 sum() 方法对系列进行求和计算. 语法 以下是 sum() 方法的语法: sum(iterable[, start]) 参数 ite ...

  7. 如何移除 input type="number" 时浏览器自带的上下箭头?

    Chrome 下 input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: no ...

  8. ajax.beginform控制器中实体为null的问题

    控制器: 函数声明:public JsonResult ApplyFun(Test test) 原因:在视图中有一个表单的name属性为test,因为冲突所导致.

  9. 面向对象设计模式纵横谈:Builder 生成器模式(笔记记录)

    Builder模式的缘起 假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分要富于变化. 如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正…… 动 ...

  10. PowerDesigner :

    P:是否为主键: F:是否为外键: M:表示强制非空: D:是否在模型中显示 修改样式.字体.颜色.等:Tools->Display Preferences->Format-> Po ...