【发布时间】:2015-07-07 22:00:59
【问题描述】:
我有以下两个课程:
class Animal {
public static void staticMethod(int i) {
System.out.println("Animal : static -- " + i);
}
public void instanceMethod(int i) {
System.out.println("Animal : instance -- " + i);
}
}
class Cat extends Animal {
public static void staticMethod(int i) {
System.out.println("Cat : static -- " + i);
}
public void instanceMethod(int i) {
System.out.println("Cat : instance -- " + i);
}
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.staticMethod(1); // Cat : static -- 1
myCat.instanceMethod(2); // Cat : instance -- 2
System.out.println("");
Animal myAnimal = myCat;
Animal.staticMethod(3); // Animal : static -- 3
myAnimal.staticMethod(4); // Animal : static -- 4 [ ? ]
System.out.println("");
myAnimal.instanceMethod(5); // Cat : instance -- 5
}
}
当我运行 Cat 时,我得到了以下结果:
Cat : static -- 1
Cat : instance -- 2
Animal : static -- 3
Animal : static -- 4
Cat : instance -- 5
我可以理解 1,2,3 和 5,但为什么 #4 不是:“Cat : static -- 4”? 我的理解是这样的:
myAnimal=myCat 表示“myAnimal”现在与“myCat”完全相同,因此在任何出现“myAnimal”的地方,您都可以将其替换为“myCat”并获得相同的结果,因为 myAnimal 中的所有内容都与所有内容相同在 myCat 中,因此“myAnimal.staticMethod(4)”应与“myCat.staticMethod(4)”相同,输出应为:“Cat : static -- 4”,类似于“myCat.staticMethod(1)”以上。
但好像不是这样,为什么呢?
【问题讨论】:
-
这是 Eclipse 告诉我的:
The static method staticMethod(int) from the type Animal should be accessed in a static way,因为它是一个静态方法,所以当你调用它的 obj 时,它只绑定到父对象Animal。 -
静态在编译时链接。这就是阻止它们被覆盖的原因
-
这是一个重复的问题,被问了很多次
标签: java object variable-assignment