Re: [問題]請問這樣的 Java Class 算不算是一個 Si …
※ 引述《fourdollars (四元)》之銘言:
: : 第二點說的是用static實作的不能實作任何"有東西的"interface
: : 這裡"有東西的"的意思是這個interface要求要實現某些成員函式
: : 但是用static實作的卻不能有任何成員函式 只能有靜態(static)函式
: Java 裡面的 class function 也可以當做 member function 來使用~ @_@a
: SingletonProcess tmp;
: tmp.runCommand("dir");
: tmp.waitForTermination();
: 還是不懂為何不能算是 Singleton ... @_@a
除了其他人說了的理由, 我補充一下.
static method 雖然可以藉著一個 instance
來 invoke, 但實際上當 compile 時, 還是改回
ClassName.method() 的樣子:
比如:
class Foo {
public static void staticMethod() {
System.out.println("Foo");
}
Foo foo = new foo;
foo.staticMethod();
這句雖然可以通過, 但實際 compile 時是會替換為
Foo.staticMethod();
由於並非經 instance invoke, 所以如果有 method
overriding 時, 是不會有任何 dynamic method lokup 出現:
class Bar extends Foo {
// overriden
public static void staticMethod() {
System.out.println("Bar");
}
}
Foo fooBar = new Bar();
fooBar.staticMethod();
這裡仍是轉為 Foo.staticMethod();
所以才會說不能 implement interface.
(雖然我覺得這樣的用字有欠精準)
Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
※ PsMonkey:轉錄至看板 java 01/10 13:22
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 16 篇):