绑定:是指一个方法的调用与方法所在的类(主题方法相绑定);
静态绑定:程序运行前方法已经被绑定。编译期进行绑定;
动态绑定:程序运行时根据具体对象类型进行绑定;
Java:编译和运行
(1)在编译期间,程序会编译成class文件,会对其中的方法和域会根类信息进行一次绑定;
(2)在运行期间,方法会根据运行时对象信息进行第二次的绑定(动态绑定),也就是长说的 多态;
举例:
class A{
int x = 10;
public void out(){
System.out.println("A out put!");
}
}
class B extends A{
int x =11;
public void out(){
System.out.println("B out put!");
}
}
public class Test {
public static void main(String[] args) {
A a = new B();
//B a = new B();
System.out.println(a.x);
a.out();
}
}
最终的输出:
10
B out put!
如果改成:
public class Test {
public static void main(String[] args) {
//A a = new B();
B a = new B();
System.out.println(a.x);
a.out();
}
}
最终的输出就是:
11
B out put!
原因:
B 继承 A
在编译阶段;x 会加载到A 和 B中;属于静态加载;
在运行阶段:A a = new B(); B 重写了A中的out()方法,x属于成员变量,A 和 B都存在,但是成员函数不会存在重写一说,父类的成员函数会被隐藏,不能被简单的被访问,父类自己的引用可以访问,所以A a = new B()访问的是父类的x,而B b = new B()访问的是B中的x;
动态记载加载会根据运行时数据动态绑定方法,out重写了,所以绑定了B中的out方法;
本文深入探讨了Java中的静态绑定与动态绑定概念,并通过具体的代码示例解析了成员变量与成员方法在不同情况下的绑定机制。文章揭示了多态性的实现原理,即如何根据运行时的对象类型来决定调用哪个方法。

被折叠的 条评论
为什么被折叠?



