早期绑定: 编译器可以在编译时解析的绑定称为静态或早期绑定。所有静态、私有和最终方法的绑定都是在编译时完成的。
例子:
public class NewClass { public static class superclass { static void print() { System.out.println("print in superclass."); } } public static class subclass extends superclass { static void print() { System.out.println("print in subclass."); } } public static void main(String[] args) { superclass A = new superclass(); superclass B = new subclass(); A.print(); B.print(); } }
运行结果:
print in superclass. print in superclass.
后期绑定: 在后期绑定或动态绑定中,编译器不决定要调用的方法。覆盖是动态绑定的完美示例。在覆盖父类和子类时具有相同的方法。
例子:
public class NewClass { public static class superclass { void print() { System.out.println("print in superclass."); } } public static class subclass extends superclass { @Override void print() { System.out.println("print in subclass."); } } public static void main(String[] args) { superclass A = new superclass(); superclass B = new subclass(); A.print(); B.print(); } }
运行结果:
print in superclass. print in subclass.
Java中早期绑定和后期绑定的区别
早期绑定 | 后期绑定 |
---|---|
早期绑定是一个编译时进程 | 后期绑定是一个运行时进程 |
方法定义和方法调用在编译时链接。 | 方法定义和方法调用在运行时链接。 |
实际对象不用于绑定。 | 实际对象用于绑定。 |
例如:方法重载 | 例如:方法覆盖 |
程序执行速度较快 | 程序执行速度较慢 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264428.html