在面向对象的多太特性中有两方面绑定技术:动态绑定和静态绑定,静态绑定主要发生于编译期期,因此他无法掉用运行期间的信息,如我们常用的静态方法,静态变量,而多头绑定呢,他主要发生于运行期,他可以调用多态的信息,那么何为动态绑定呢?我们先来看一段代码:
class Base{
int i=47;
int f(){
return g();
}
int g(){
return i;
}
}
class Dervied extends Base{
int i=27;
int g(){
return i;
}
}
public class test {
public static void main (String[] args)
{
Derived d = new Derived(); //生成Derived的对象
System.out.println(d.f());
// d.f() === Derived.f(d);
}
}
这段代码运行之后将输出27而非47,这就是所谓的动态绑定,子类被实例化后能够根据自己的类型调用相应的方法而非父类的方法。这里问题出现了,如果把子类的g()函数申明为private呢?这样下去将产生错误,因为java不允许将public覆盖为private,但php语言可以,如果是php语言,那他执行的将是父类的go(),这也许就是php语言的特点,懒散,松散吧,非安全性的语言
正文完