一.定义:
1.方法绑定:一个方法被调用时该方法关联其方法体的过程。
2.静态绑定:在面向过程的中又称为前期绑定在程序编译时进行了绑定,即在还没运行时,就已经加载到内存。
3.动态绑定:在面向过程中称为后期绑定(运行时绑定)在运行时就进行绑定,根据实际情况有选择的进行绑定。
二.优越性:
动态绑定灵活性相对静态绑定来说要高,因为它在运行之前可以进行选择性的绑定,很多时候优点就是缺点,正是因为选择性的绑定,所以动态绑定的执行效率要低些(因为,绑定对象,还要进行编译)。
三.静态绑定实例:
Java代码 01.//父类 
02.public class Person { 
03.     
04.    protected String attribute="人的特性"; 
05. 
06.} 
07. 
08.//子类 
09.public class Male extends Person { 
10. 
11.    protected String attribute = "男人的特性"; 
12. 
13.     
14.} 
15.//测试 
16. 
17.public class Tester { 
18. 
19.public static void main(String[] args) { 
20. 
21.        Person p = new Male(); 
22. 
23.        System.out.println("" + p.attribute); 
24.    } 
25. 
26. 
27.} 
[java] view plaincopyprint?
01.<SPAN ><SPAN >//父类 
02.public class Person { 
03.     
04.    protected String attribute="人的特性"; 
05. 
06.} 
07. 
08.//子类 
09.public class Male extends Person { 
10. 
11.    protected String attribute = "男人的特性"; 
12. 
13.     
14.} 
15.//测试 
16. 
17.public class Tester { 
18. 
19.public static void main(String[] args) { 
20. 
21.        Person p = new Male(); 
22. 
23.        System.out.println("" + p.attribute); 
24.    } 
25. 
26. 
27.} 
28. 
29. 
30.</SPAN></SPAN> 
//父类
public class Person {
protected String attribute="人的特性";
}
//子类
public class Male extends Person {
protected String attribute = "男人的特性";
}
//测试
public class Tester {
public static void main(String[] args) {
Person p = new Male();
System.out.println("" + p.attribute);
}
}
输出结果:人的属性
可以看出子类的对象调用到的是父类的成员变量。所以必须明确,动态绑定针对的范畴只是对象的方法。
static 块静态加载:
Java代码 01.public class StaticTest { 
02. 
03.    static { 
04. 
05.        System.out.println("没有主方法我照样执行"); 
06.    } 
07.} 
[java] view plaincopyprint?
01.<SPAN ><SPAN >public class StaticTest { 
静态网页和动态网页的概念和区别02. 
03.    static { 
04. 
05.        System.out.println("没有主方法我照样执行"); 
06.    } 
07.}</SPAN></SPAN> 
public class StaticTest
{
static {
System.out.println("没有主方法我照样执行");
}
}
运行结果:
没有主方法我照样执行java.lang.NoSuchMethodError: main
Exception in thread "main" 
java中的变量都是静态绑定的;
构造方法 以及private,static,final类方法的调用都是静态绑定的。
四.动态绑定实例:
Java代码 01.//父类 
02.public class Person { 
03.   
04.  public void  show(){ 
05.    System.out.println("人的特性"); 
06.  } 
07.} 
08.//子类 
09.public class Male extends Person{ 
10. 
11.  public void show(){ 
12. 
13.    System.out.println("男人的特性"); 
14.} 
15.} 
16.//测试 
17.public  class Tester{ 
18. 
19.public static void main(String [] args){ 
20.             
21.        Person p = new Male(); 
22.        p.show(); 
23.    } 
24.} 
[java] view plaincopyprint?
01.<SPAN ><SPAN >//父类 
02.public class Person { 
03.   
04.  public void  show(){ 
05.    System.out.println("人的特性"); 
06.  } 
07.} 
08.//子类 
09.public class Male extends Person{ 
10. 
11.  public void show(){ 
12. 
13.    System.out.println("男人的特性"); 
14.} 
15.} 
16.//测试 
17.public  class Tester{ 
18. 
19.public static void main(String [] args){ 
20.             
21.        Person p = new Male(); 
22.        p.show(); 
23.    } 
24.} 
25.</SPAN></SPAN> 
//父类
public class Person {
public void  show(){
System.out.println("人的特性");
}
}
//子类
public class Male extends Person{
public void show(){
System.out.println("男人的特性");
}
}
//测试
public  class Tester{
public static void main(String [] args){
Person p = new Male();
p.show();
}
}
运行结果:男人的特性
上面当创建一个Male类对象,通过继承的关系向上转型立即赋值给Person类的对象,貌似调用的是Person中的show();,然而从输出的结果看调用的却是Male类中的show();这就是动态绑定的结果,它能在运行时到实际最适合类型的方法进行调用

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。