class A1 {
public static void f() {
System.out.println("A1.f()");
}
}
class A2 extends A1 {
public static void f() {
System.out.println("A2.f()");
}
}
class T {
public static void main(String[] args) {
A1 a1 = new A1();
A1 a2 = new A2();
// 静态方法不具有多态效果,它是根据引用声明类型来调用
a1.f();// A1.f()
a2.f();// A1.f()
}
}
对静态方法的调用不存在任何动态的分派机制。当一个程序调用了一个静态方法,要被调用的方法都是在编译时就被选定的,即调用哪个方法是根据该引用被声明的类型决定的。上面程序中a1与a2引用的类型都是A1类型,所以调用的是A1中的f()方法。
原帖地址:http://jiangzhengjun.iteye.com/blog/652748
相关文章
- 02-23Android-Java-静态变量与静态方法内存图
- 02-23Struts2中使用OGNL表达式语言访问静态方法和静态属性
- 02-23static方法中为什么使用的都是静态变量
- 02-23java-在JShell中声明的方法是lambda?
- 02-23Java中与数据库对应操作的方法名怎么取比较合适
- 02-23java – 同步方法的weakValue映射引用中的内存泄漏
- 02-23python中,类方法和静态方法区别。
- 02-23详解Python中的__init__和__new__(静态方法)
- 02-23同一个类中的 静态代码块 构造代码块 构造方法
- 02-23ES5和ES6中的静态方法、类、单例模式