看板 java 關於我們 聯絡資訊
例題如下: 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在這裡是起什麼樣的作用呢? 跪求高手解惑,感謝... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 84.193.161.32 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1419006844.A.98B.html
BaiYe: 我不是強者 無法給甚麼想法 但是可以先看看這篇文章 12/20 00:55
BaiYe: #1InXOEIG (java) 或是同系列的幾篇 12/20 00:55
BaiYe: 也許看完就懂了~~ 至少我那時候看完後 對static更認識了! 12/20 00:56
hegemon: static method是看Class,而不是instance... 12/20 02:50
hegemon: 所以aInstance.doSth()還是執行A的doSth... 12/20 02:52
hegemon: 不過這種寫法一般來說是會被Eclipse警告的... 12/20 02:52
hegemon: 在真的寫code時,不要用instance去執行static method 12/20 02:53
cha122977: static method無法被Override 12/20 02:55
yfr: 用這樣的例子其實跟static沒什麼關係 12/20 14:10
yfr: 首要你要先搞懂Class field, method跟Instance field, method 12/20 14:13
yfr: 講的粗略一點,static修飾子會讓field, method成為Class的 12/20 14:16
yfr: 那麼你不需要new出來,就能用Class.var, Class.method存取 12/20 14:17
yfr: 同時這東西在記憶體中也是唯一的,要注意thread-safe的問題 12/20 14:18
yfr: 反之如果不加static就是Instance field, method 12/20 14:20
yfr: 要取得field或method就必須new出來,例如 12/20 14:21
yfr: Class c = new Class();用c.var(public), c.method(public)叫 12/20 14:24
Kenqr: A aInstance = null; aInstance.doSth(); 12/20 14:41
Kenqr: 上面這樣也是能跑的,因為呼叫static method只看class 12/20 14:41
Kenqr: 所以呼叫static method請直接用class名呼叫,以免造成混淆 12/20 14:42
fuchs: Static 只和class有關,和instance無關 12/20 23:18
tubbysong: C宣告類別 cInstance物件名 = new建立空間的關鍵字 C() 12/23 01:45
tubbysong: new C();單純創造空間時的初始化處理,不決定物件 12/23 01:49