浅谈java的绑定机制--多态的基础

何为绑定

  • 何为绑定?绑定主要是用来处理java中出现的同名方法的选择问题的。绑定是将一个方法与方法所在的类绑定起来,从而决定调用哪个方法。

  • 在java的编写中,经常无法避免的使用同名的方法,如Override或者Overload,当一个对象向上转型后,是否还能按照我们的意愿去执行某个方法,这一特性就要以绑定为基础实现。

绑定的类别

常见的绑定有静态绑定和动态绑定之分,也叫前期绑定和后期绑定。

静态绑定

所谓静态绑定,就是在编译过程就能完成的绑定。是否静态绑定也很好区分,在java中的private,final,static以及构造方法都是静态绑定的:

private方法

private方法只属于这个类,不能被子类继承以及复写.

因此从属关系很好判断,静态绑定就可以完成。

static方法

static方法可以被继承,但不会被子类重写,而是被隐藏。

这里可以理解为static方法是某一个类所公用的。再被子类继承后,如果没有Override操作,那么子类调用该方法名将会调用父类的方法;而如果进行Override操作,那么子类调用该方法名将会调用新写的方法。(任何一个方法都是这样)唯一区别于后面的动态方法的是,当子类向上转型为父类类型后再调用该方法,调用的将是父类的方法。这种绑定完全依赖于调用类的类型,静态绑定便可完成。

final方法

final方法可以被继承,但是不能被子类重写。

也就是说所有对该方法名的调用都是父类的那个final方法,不存在判断,静态绑定即可完成。我们往往通过将方法记为final来关闭动态绑定。

构造方法

构造方法和private一样,是无法被继承的,只能通过super或jvm默认调用,可以静态的完成绑定。

动态绑定

所谓动态绑定,就是在程序运行时,通过对类类型的判断来选择正确的方法去执行。
查阅资料得到动态绑定的大概实现过程:

  1. 虚拟机提取对象实际类型的方法表
  2. 虚拟机搜索方法签名
  3. 调用方法

有了动态绑定,我们就可以在向上转型后已经成功的调用重写的父类方法,为程序的编写提供了很大的便利。

多态的实现

下面写个例子来表述一下多态的情况:

class father
{
	void f()
	{
		System.out.println("father");
	}
}
class son extends father
{
	@Override
	void f()
	{
		System.out.println("son");
	}
}
public class testone {

	public static void main(String[] args) {
		father person = new son();
		person.f();
	}

}/* Output:
son
*///:~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值