标签:
# my java note ---- 绑定
# victor
# 2016.06.07
JAVA 绑定
1. 属性
Java 中属性与类绑定(静态绑定)。如果子类和父类的属性相同,父类就会隐藏自己的属性。
2. 方法
2.1 程序绑定:
绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对Java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。
2.2 静态绑定:
在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现。例如:C。
针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定。
2.3 动态绑定:
后期绑定:在运行时根据具体对象的类型进行绑定。
若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。
动态绑定的过程:
1 > 虚拟机提取对象的实际类型的方法表;
2 > 虚拟机搜索方法签名;
3 > 调用方法。
<NOTE>
关于final,static,private和构造方法是前期绑定的理解:
<1> final 方法可被子类继承,但不可被覆盖。所以应该与父类绑定。(private属于final方法)
<2> 构造方法也是不能被继承的,因此编译时也可以知道这个构造方法到底是属于哪个类。
<3> static 方法会在编译期与类绑定,子类可以继承,但不能覆盖,只能隐藏。static 方法与对象无关,只与类相关。(隐藏和覆盖的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏的变量和方法,而不能访问父类被覆盖的方法)。
<CODE>
public class Base { public String name = "Base class"; public static void staticMethod() { System.out.println("Base staticMethod()"); } public void CommonMethod() { System.out.println("Base CommonMethod()"); } public String getName() { return name; } }
public class Derive extends Base{ public String name = "Derive class"; public static void staticMethod() { System.out.println("Derive staticMethod()"); } public void CommonMethod() { System.out.println("Derive CommonMethod()"); } public String getName() { return name; } }
public class testblind { //输出成员变量的值,验证其为前期绑定。 public static void testFieldBind(Base base) { System.out.println(base.name); } //静态方法,验证其为前期绑定。 public static void testStaticMethodBind(Base base) { base.staticMethod(); } //调用非静态方法,验证其为后期绑定。 public static void testNotStaticMethodBind(Base base) { base.CommonMethod(); } public static void main(String[] args) { Derive d= new Derive(); Base b = new Derive(); testFieldBind(d); System.out.println(d.getName()); testStaticMethodBind(d); testNotStaticMethodBind(d); testFieldBind(b); System.out.println(b.getName()); testStaticMethodBind(b); testNotStaticMethodBind(b); } }
Base class
Base staticMethod()
Derive CommonMethod()
Derive class
Base class
Base staticMethod()
Derive CommonMethod()
Derive class
标签:
原文地址:http://www.cnblogs.com/ct-blog/p/5567786.html