package com.test;
public class Test {
public static void main(String[] args) {
A a = new B();
a.test();
}
}
class A {
public void test() {
System.out.println("父类(A类)方法");
}
}
class B extends A {
public void test() {
System.out.println("子类(B类)方法");
}
}
要访问a的test,动态绑定机制发动,访问了子类的test()方法
package com.test;
public class Test {
public static void main(String[] args) {
A a = new B();
a.test();
}
}
class A {
public static void test() {
System.out.println("父类(A类)方法");
}
}
class B extends A {
public static void test() {
System.out.println("子类(B类)方法");
}
}
如果方法加上了static,动态绑定机制失效,也就是说方法重写失败。
Q:那为什么静态方法不可以被重写呢?
A:静态方法是在类加载中就已经生成的,也就是可以直接使用了。就是“开袋即食”,就是已经确定要使用的,要“吃”的;
非静态方法则是在实例化对象后,有动态绑定,那就用重写过的方法。