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
相关文章
- 01-31Struts2中使用OGNL表达式语言访问静态方法和静态属性
- 01-31static方法中为什么使用的都是静态变量
- 01-31java-在JShell中声明的方法是lambda?
- 01-31Java中与数据库对应操作的方法名怎么取比较合适
- 01-31java – 同步方法的weakValue映射引用中的内存泄漏
- 01-31python中,类方法和静态方法区别。
- 01-31详解Python中的__init__和__new__(静态方法)
- 01-31同一个类中的 静态代码块 构造代码块 构造方法
- 01-31ES5和ES6中的静态方法、类、单例模式
- 01-31Java初学笔记22-【线程、继承Thread类、实现Runnable接口、静态代理模式、进程终止、线程常用方法、用户线程和守护线程、线程同步机制、线程死锁、互斥锁、释放锁】