关于java动态绑定(一个一个捡呗)

多态-声明类型与实际类型

要讲到java的动态绑定,那么一定绕不开的是java变量的声明类型和实际类型。

1 Object o=new Actual();

这之中,Object属于o的声明类型,Actual为o的实际类型。
Object是Actual的父类。可以这么理解,我声明o是一个人(Object),但他实际上可以是医生(Actual)也可以是警察(Actual),但他不能是一条博美∩_∩。

顺带提一下声明类型和实际类型的赋值问题。

/*再声明变量*/
Actual police;
police=o;//×
o=police;//√

o本身声明的还是一个Object类,信息数比Actual少,当将police赋值给o时,可以丢弃多余部分,而将其有的属性赋值(如身高,年龄),但不能将o赋值给police(因为属性是不够的)。

静态绑定

java的静态绑定包括private,static,final和构造方法。

这四种方法的特点是不会出现方法重写,所以不会出现子类和父类信息完全相同的方法。所以在编译的时候就能确定的方法。

动态绑定

动态绑定是一种运行时才能知道的绑定,编译时不能确定具体的调用。

java的动态绑定常见于方法的重载和重写。

如上的例子中

class police extends man{
	void eat();//工作餐
	void arrest();//逮捕
}
class man{
	void eat();//回家吃饭
	void sleep();//回家睡觉
}

void main(){
	man m=new police();
	m.eat();
	m.sleep();
	//m.arrest();   ---报错
	((police) m).arrest();

}

声明一个m为人,实例化为一个警察。

  1. 执行eat()时,警察并不能回家吃饭,因为确定了吃的是工作餐(子类重写了父类的方法,此时执行子类的方法)。
  2. 执行sleep()时,警察并没有在警局睡觉的规定,所以回家睡觉(子类没有重写父类的方法,所以执行父类的方法)。
  3. 执行arrest()时,系统报错,因为虽然实例化为一个警察, 但声明的还是一个人,不能没有证明随便逮捕人(声明为父类的对象,不能执行子类的方法)。但拿出警察和逮捕证明后就可以逮捕人(强制类型转换,表面此对象可以作为一个子类执行)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值