[问题] 搞不懂static

楼主: wtchen (没有存在感的人)   2014-12-20 00:34:01
例题如下:
class A {
public static void doSth(){
System.out.println("Doing something in A");
}
}
class B extends A {
public static void doSth(){
System.out.println("Doing something in B");
}
}
class C extends B {
public static void doSth(){
System.out.println("Doing something in C");
}
}
class test {
public static void main(String [] args) {
A.doSth();
B.doSth();
C.doSth();
A aInstance = new B();
B bInstance = new C();
C cInstance = new C();
aInstance.doSth();
bInstance.doSth();
cInstance.doSth();
}
}
执行结果是
Doing something in A
Doing something in B
Doing something in C
Doing something in A
Doing something in B
Doing something in C
前三个我可以理解,后三个我就不懂了,static在这里是起什么样的作用呢?
跪求高手解惑,感谢...
作者: BaiYe (摆耶)   2014-12-20 00:55:00
我不是强者 无法给什么想法 但是可以先看看这篇文章#1InXOEIG (java) 或是同系列的几篇也许看完就懂了~~ 至少我那时候看完后 对static更认识了!
作者: hegemon (hegemon)   2014-12-20 02:50:00
static method是看Class,而不是instance...所以aInstance.doSth()还是执行A的doSth...不过这种写法一般来说是会被Eclipse警告的...在真的写code时,不要用instance去执行static method
作者: cha122977 (CHA)   2014-12-20 02:55:00
static method无法被Override
作者: yfr   2014-12-20 14:10:00
用这样的例子其实跟static没什么关系首要你要先搞懂Class field, method跟Instance field, method讲的粗略一点,static修饰子会让field, method成为Class的那么你不需要new出来,就能用Class.var, Class.method存取同时这东西在内存中也是唯一的,要注意thread-safe的问题反之如果不加static就是Instance field, method要取得field或method就必须new出来,例如Class c = new Class();用c.var(public), c.method(public)叫
作者: Kenqr (function(){})()   2014-12-20 14:41:00
A aInstance = null; aInstance.doSth();上面这样也是能跑的,因为呼叫static method只看class所以呼叫static method请直接用class名呼叫,以免造成混淆
作者: fuchs (fuchs)   2014-12-20 23:18:00
Static 只和class有关,和instance无关
作者: tubbysong (song)   2014-12-23 01:45:00
C宣告类别 cInstance物件名 = new建立空间的关键字 C()new C();单纯创造空间时的初始化处理,不决定物件

Links booklink

Contact Us: admin [ a t ] ucptt.com