静态绑定与动态绑定

一.[color=green]定义[/color]:

1.方法绑定:一个方法被调用时该方法关联其方法体的过程。
2.静态绑定:在面向过程的中又称为前期绑定在程序编译时进行了绑定,即在还没运行时,就已经加载到内存。
3.动态绑定:在面向过程中称为后期绑定(运行时绑定)在运行时就进行绑定,根据实际情况有选择的进行绑定。


二.[color=green]优越性[/color]:

动态绑定灵活性相对静态绑定来说要高,因为它在运行之前可以进行选择性的绑定,很多时候优点就是缺点,正是因为选择性的绑定,所以动态绑定的执行效率要低些(因为,绑定对象,还要进行编译)。

三.[color=green]静态绑定实例[/color]:

//父类
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);
}


}





输出结果:[color=green]人的属性[/color]

可以看出子类的对象调用到的是父类的成员变量。所以必须明确,动态绑定针对的范畴只是对象的方法。


static 块静态加载:

public class StaticTest {

static {

System.out.println("没有主方法我照样执行");
}
}


运行结果:
[color=green]没有主方法我照样执行[/color][color=red]java.lang.NoSuchMethodError: main
Exception in thread "main" [/color]

java中的变量都是静态绑定的;
构造方法 以及private,static,final类方法的调用都是静态绑定的。

四.[color=green]动态绑定实例[/color]:

//父类
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();
}
}


运行结果:[color=red]男人的特性[/color]

上面当创建一个Male类对象,通过[color=olive]继承[/color]的关系[color=olive]向上转型[/color]立即赋值给Person类的对象,貌似调用的是Person中的show();,然而从输出的结果看调用的却是Male类中的show();这就是动态绑定的结果,它能在运行时找到实际最适合类型的方法进行调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值