1. 动态绑定

将一个方法调用同一个方法主体关联起来被称作绑定。

在运行时根据对象的类型进行绑定,叫做后期绑定或运行时绑定。Java中除了static方法和final

例如,下面定义了一个Shape类型的变量,这是个Shape引用,由于后期绑定,赋予其子类Circle的一个对象引用,最终调用的是Circle.draw()方法。

 package com.khlin.binding.test;

 public class App {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
}
} class Shape {
public void draw() {
System.out.println("i m a shape...");
}
} class Circle extends Shape {
public void draw() {
System.out.println("i m a circle...");
}
}

输出:i m a circle...

2.没有动态绑定的缺陷

任何域都将由编译器解析,因此不是多态的。

静态方法也不是多态的。

来看下面的例子:

 package com.khlin.binding.test;

 public class App {
public static void main(String[] args) {
// Shape shape = new Circle();
// shape.draw(); Shape shape = new Triangel();
/** 直接访问域,得到的是0,说明域无法动态绑定 */
System.out.println("shape field[degreeOfAngels]:"
+ shape.degreeOfAngels);
/** 调用方法,得到180,说明是动态绑定 */
System.out.println("shape [getDegreeOfAngels() method]:"
+ shape.getDegreeOfAngels());
/** 静态方法无法动态绑定 */
shape.print();
/** 静态域同样无法动态绑定 */
System.out.println("shape field[lines]:" + shape.lines);
}
} class Shape {
/** 内角之和 */
public int degreeOfAngels = 0; /** 共有几条边 */
public static final int lines = 1; public int getDegreeOfAngels() {
return degreeOfAngels;
} public void draw() {
System.out.println("i m a shape...");
} public static void print() {
System.out.println("printing shapes...");
}
} class Triangel extends Shape {
/** 内角之和 */
public int degreeOfAngels = 180; /** 共有几条边 */
public static final int lines = 3; public int getDegreeOfAngels() {
return degreeOfAngels;
} public void draw() {
System.out.println("i m a triangel...");
} public static void print() {
System.out.println("printing triangel...");
}
}

输出结果是:

shape field[degreeOfAngels]:0
shape [getDegreeOfAngels() method]:180
printing shapes...
shape field[lines]:1

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

  1. Java动态绑定与静态绑定

    Java动态绑定来自于继承体现,子类继承父类,子类重新覆盖了父类的方法,就是动态绑定,以下举例: (动态绑定是在运行期间) 动物类: /** * 创建一个动物类 * @author Liudeli * ...

  2. 【解惑】Java动态绑定机制的内幕

    在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto ...

  3. java动态绑定的情况分析

    java是面向对象的语言,java中多态的一种情况是动态绑定.所谓的动态绑定,分两种情况:当调用类方法的时候,java虚拟机会基于对象的引用类型来选择执行方法.当java调用一个实例方法的时候,他会根 ...

  4. Java动态绑定的内部实现机制

     JAVA虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法.相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动 ...

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

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

  6. Java 动态绑定

    转载  http://www.cnblogs.com/ygj0930/p/6554103.html 一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定.绑定分为静态绑定(前期绑定)和动态绑 ...

  7. Java 动态绑定和多态

    动态绑定和多态 动态绑定是指:"在执行程序期间(而非编译期间),判断引用所指对象的实际类型,调用其相应的方法." 动态绑定(多态)存在的条件 要有继承. 要有重写. 父类引用指向子 ...

  8. Java动态绑定与多态

    在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特性.多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来.在一开始接触多态这个词的时候,我们或许会因为这个词本身而感到困惑, ...

  9. Java——动态绑定和多态

    动态绑定是在执行期间(而不是编译期间)判断所用对象的实际类型,根据其实际的类型调用其相应的方法(确定选择哪个多态形式被调用). 首先是方法的参数是父类对象,传入子类对象是否可行 然后引出Parent ...

随机推荐

  1. css3动画(transition)属性探讨

    在webapp引用开发中经常会用到css3动画效果,下面我们就一起探讨一下这个属性的使用. 在哪里定义动画效果? css3动画一般通过鼠标事件或者说状态定义动画,通常我们可以用CSS中伪类和js中的鼠 ...

  2. BZOJ_1016_[JSOI2008]_最小生成树计数_(dfs+乘法原理)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1016 给出一张图,其中具有相同权值的边的数目不超过10,求最小生成树的个数. 分析 生成树的计 ...

  3. NOI2008假面舞会

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 883  Solved: 462[Submit][Status] ...

  4. [HUST 1017] Exact cover

    Exact cover Time Limit: 15s Memory Limit: 128MB Special Judge Submissions: 6012 Solved: 3185 DESCRIP ...

  5. 开始同时在cnblog和BAE上写博客

    研究生第一学期已过一半,开始理论学习,当然不能忘了实践学习. \[\frac{{ - b \pm \sqrt {{b^2} - 4ac} }}{{2a}}\]  

  6. Windows下Lua+Redis 断点调试环境搭建==Linux下类似

    Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定. 1.下载ZeroBraneStudio, ...

  7. 【HTML】Beginner4:Heading

    1.Headings h1 h2 h3 h4 h5 h6     h1 being the almighty emperor of headings     h6 being the lowest p ...

  8. leetcode 逆转字符串 当年的第一题,今天再写一遍,物是人非

    public class Solution { public String reverseWords(String s) { if(s==null||s.length()==0) return &qu ...

  9. 《Introduction to Algorithm》-chaper33-计算几何学

    叉积: 在平面中我们为了度量一条直线的倾斜状态,为引入倾斜角这个概念.而通过在直角坐标系中建立tan α = k,我们实现了将几何关系和代数关系的衔接,这其实也是用计算机解决几何问题的一个核心,计算机 ...

  10. 问题-[DelphiXE2]提示第三控件不存在

    问题情况:在DelphiXE2启动时界面显示加载了控件,并且控件的路径也放在了环境变量中,但打开程序报第三控件不存在. 问题原因:是没有选择要加载的控件. 问题处理:点击Component->I ...