/**
*/
public class Test {
public static void main(String args[]) {
Super s = new Sub();
//静态方法引用变量所声明的类型(Super类型)的方法绑定
s.m();//所以你打印的super类的m方法
}
}
class Super {
public static void m() {
System.out.println("super");
}
}
class Sub extends Super {
public static void m() {
System.out.println("sub");
}
}
-------------------------------------------------
在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,Java虚拟机采用以下绑定规则:
1, 实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由Java虚拟机动态决定的
2, 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经绑定
3, 成员变量(静态变量,实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经绑定
|