当前位置: 技术问答>java相关
今天问题特别多,弱啊~~~向大家讨教~
来源: 互联网 发布时间:2015-02-06
本文导语: public class StaticOverridingTest { public static void main(String s[]) { Child c = new Child(); c.doStuff(); Parent p = new Parent(); p.doStuff(); p = c; p.doStuff(); } } class Parent { static int x = 100; public static void doS...
public class StaticOverridingTest {
public static void main(String s[]) {
Child c = new Child();
c.doStuff();
Parent p = new Parent();
p.doStuff();
p = c;
p.doStuff();
}
}
class Parent {
static int x = 100;
public static void doStuff() {
System.out.println("In Parent..doStuff");
System.out.println(x);
}
}
class Child extends Parent {
static int x = 200;
public static void doStuff() {
System.out.println("In Child..doStuff");
System.out.println(x);
}
}
为什么
p = c;
p.doStuff();
还是执行的Parent中的doStuff ??
public static void main(String s[]) {
Child c = new Child();
c.doStuff();
Parent p = new Parent();
p.doStuff();
p = c;
p.doStuff();
}
}
class Parent {
static int x = 100;
public static void doStuff() {
System.out.println("In Parent..doStuff");
System.out.println(x);
}
}
class Child extends Parent {
static int x = 200;
public static void doStuff() {
System.out.println("In Child..doStuff");
System.out.println(x);
}
}
为什么
p = c;
p.doStuff();
还是执行的Parent中的doStuff ??
|
因为static method 是在编译时静态绑定的(区别于overriding一般的动态绑定),所以,p.doStuff主要看p的类型,而跟p指向的变量的类型无关。
p.s. 现在怎么这么多人要考scjp?
p.s. 现在怎么这么多人要考scjp?
|
执行Parent中的doStuff
这是因为P是Parent对象,而且doStuff是静态方法,Private,static ,final都代表静态,是不存在Overriding。所以..........................
这是因为P是Parent对象,而且doStuff是静态方法,Private,static ,final都代表静态,是不存在Overriding。所以..........................