欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-10 14:53:14
...

何为绑定

  • 何为绑定?绑定主要是用来处理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
*///:~

相关标签: 软件构造