JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 static method不能宣告成abstract的原因是什麼?
mojo





發文: 297
積分: 3
於 2004-01-27 01:17 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我的書上是寫說,無法用super.staticMethod()來呼叫,不能達到覆寫的目的,但是只要用SuperClassName.staticMethod()就能解決這問題丫,所以我不太滿意這個答案也,有人能給我別的解釋嗎?

reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:mojo]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-01-27 01:40 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
mojo wrote:
我的書上是寫說,無法用super.staticMethod()來呼叫,不能達到覆寫的目的,但是只要用SuperClassName.staticMethod()就能解決這問題丫,所以我不太滿意這個答案也,有人能給我別的解釋嗎?


我覺得要問為什麼static method不能宣告成abstract
不如先問你什麼情況下會想把static method宣告成abstract?


reply to postreply to post
YOSHI!
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:Yoshi]
TAHO

可愛吧∼∼

版主

發文: 271
積分: 7
於 2004-01-27 02:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
說的好 :b

一般會將 method 宣告為 abstract 的原因是想讓不同的子類別實作出不同的內容
以達到多型的目的
也就是不同類別的『物件』會有不同的表現方式

既然 static method 無法達成多型,那宣告為 abstract 就一點意義也沒有了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Super{
    public static void staticMethod() { System.out.println("Super static"); }
    public void instanceMethod() {  System.out.println("Super instance"); }
}
 
public class Sub1 extends Super{
    public static void staticMethod() {  System.out.println("Sub1 static"); }
    public void instanceMethod() { System.out.println("Sub1 instance"); }
}
 
public class Sub2 extends Super{
    public static void staticMethod() {  System.out.println("Sub2 static"); }
    public void instanceMethod() {  System.out.println("Sub2 instance"); }
}


於是

1
2
3
4
5
Super[] objs = {new Super(), new Sub1(), new Sub2() };
for (int i = 0; i < objs.length; i++) {
    objs[i].staticMethod();
    objs[i].instanceMethod();
}


你會發現,instanceMethod() 會根據『物件』所屬類別來呼叫正確的方法
但是 staticMethod 卻會根據『變數』所屬型別來呼叫方法
如果你將 Super 的 staticMethod 宣告為 abstract,肯定問題多多∼∼


reply to postreply to post
請養成良好的 Java 程式碼慣例 習慣
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:mojo]
jocosn





發文: 102
積分: 5
於 2004-05-07 14:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
被批離題,刪掉了 .................. Black Eye

jocosn edited on 2004-05-09 00:12
reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:jocosn]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-05-08 01:51 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jocosn wrote:
但是 inner class 可以ㄡ
1
2
3
4
5
6
7
8
9
10
11
public abstract class MyAbstract {
    public static void main(String[] args){
        System.out.println("Hello World");
        A.myRun();
    }
    abstract static class A{     // 註
       static void myRun(){
          System.out.println("inner class...");
       }
    }
}

執行結果
Hello World
inner class...


from JLS:
An inner class is a nested class that is not explicitly or implicitly declared static.

對nested class加上staitc的話,其實效果等同於一般的outer class
所以這個程式的效果等同於

1
2
3
4
5
6
7
8
9
10
11
public abstract class MyAbstract {
    public static void main(String[] args){
        System.out.println("Hello World");
        A.myRun();
    }
}
abstract class A {
   static void myRun(){
      System.out.println("inner class...");
   }
}


reply to postreply to post
YOSHI!
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:Yoshi]
jocosn





發文: 102
積分: 5
於 2004-05-08 15:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
被批離題,刪掉了 ..................

jocosn edited on 2004-05-09 00:10
reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:jocosn]
annec





發文: 20
積分: 0
於 2004-05-08 20:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我覺得考慮到static inner class其意義就像是一個位於outer class命名空間下的class,所以使用abstract去加以修飾,就像我們宣告一個abstract class一樣。
而各種inner class其所能接受的修飾詞,我們可以做如是觀:
一個inner class都受到兩種影響,其所在位置的影響和身為一個class的影響

所在位置的影響:身在outer class內,就像此class的成員一般會受到像public,protected,private的存取修飾詞所限制

class的影響:class可以被創建,可以被繼承,可以被覆寫

其實還有更加複雜的用法,但如果把握住這些原則,應該不至迷惑


reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:annec]
jocosn





發文: 102
積分: 5
於 2004-05-08 23:27 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
被批離題,刪掉了 .................. Black Eye

jocosn edited on 2004-05-09 00:11
reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:jocosn]
Duncan

還隱隱作痛

版主

發文: 7816
積分: 39
於 2004-05-08 23:41 user profilesend a private message to usersend email to Duncanreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jocosn wrote:
但是 inner class 可以ㄡ
1
2
3
4
5
6
7
8
9
10
11
public abstract class MyAbstract {
    public static void main(String[] args){
        System.out.println("Hello World");
        A.myRun();
    }
    abstract static class A{     // 註
       static void myRun(){
          System.out.println("inner class...");
       }
    }
}

執行結果
Hello World
inner class...


請問這跟原來的標題 "static method不能宣告成abstract" 有什麼關係?


reply to postreply to post

給我
辣味豆腐 其餘免談
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:Duncan]
annec





發文: 20
積分: 0
於 2004-05-08 23:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
是離題了

reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:Duncan]
jocosn





發文: 102
積分: 5
於 2004-05-09 00:07 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Duncan wrote:
請問這跟原來的標題 "static method不能宣告成abstract" 有什麼關係?


ㄚ是沒關係啦,一開始是在看舊文章看到這篇,只是提出來說一下讓大家注意一下。我一開始貼的完全沒有問問題ㄡ,只是提醒新手,class 內的 member 除了 methods、fields 外還有別的,遇到 inner classes 不要也以為也是這樣。我想大家可能希望能夠促類旁通,而不只侷限在這個問題。
我一開始貼的只是提醒新手,只是貼一下提醒新手(怪我雞婆啦,沒是找事做),但是 Yoshi 版主太熱心了,幫大家解釋WHY??
熱心很好ㄚ,只是我覺得 Yoshi 版主可能解釋的有點小缺陷,因為沒有考慮到access modiifer,所以用 ? 號提醒一下。畢竟他是版主,尊重一下ㄚ。
因為標題跟mojo問的內容原本就讓新手搞不懂在問什麼。當然老鳥懂,可是是新手區ㄟ。

而且 Yoshi 說
Yoshi wrote:
我覺得要問為什麼static method不能宣告成abstract
不如先問你什麼情況下會想把static method宣告成abstract?


加上mojo的原始問題又很含糊,書是什麼書,程式碼也沒寫,是不是犯了提問的智慧???
四、詳細的準備問題
........
3、原始程式
.............

老實講,這篇文章老早就該刪掉了吧!!!????????????????????????????????
mojo wrote:
我的書上是寫說,無法用super.staticMethod()來呼叫,不能達到覆寫的目的,但是只要用SuperClassName.staticMethod()就能解決這問題丫,所以我不太滿意這個答案也,有人能給我別的解釋嗎?

請仔細看內容,abstract 完全沒有出現,完全沒有ㄡ !!!!!!
如果覺得真的不行,請刪掉我的文章吧。我自己刪好了。


jocosn edited on 2004-06-06 05:18
reply to postreply to post
作者 Re:static method不能宣告成abstract的原因是什麼? [Re:jocosn]
annec





發文: 20
積分: 0
於 2004-05-09 00:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可以請問一下,你所謂的書上都有寫的inner class的介紹 是看哪些書籍呢?
可以讓我參考一下嗎?
我想深入的了解一下


reply to postreply to post
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8