這是什麼意思,如果你讓一個類的默認訪問,並標記該類中包含的方法公開?換句話說,如果封閉類無法公開訪問,怎麼能公開訪問方法?默認訪問類中的公共訪問方法..有什麼意義?
回答
在某些情況下可能需要公開方法,例如,當您的具有默認訪問權限的類實現公共接口時。
當您的API根據接口定義並且您的默認訪問類實現了其中一個公共接口時,這非常有用。您的API的用戶可以通過工廠方法實例化您的默認訪問類。
你指出了一件非常有趣的事情。我沒有想到這一點。謝謝。 – user3516726 2014-09-21 14:56:01
還有一個問題。這是唯一的情況下,在默認訪問類中聲明公共方法是有意義的嗎? – user3516726 2014-09-21 15:14:27
@ user3516726這是最常見的情況,也是唯一嚴格要求的情況(我計算在這個類別中實現公共抽象類和非抽象類)。其他情況並不嚴格要求公開的方法,但是您可以選擇繼續使用,以向在您之後維護您的代碼的人強調這些方法旨在供任何有權訪問此類的人使用。 – dasblinkenlight 2014-09-21 17:07:45
public
當您重寫某些公開方法或實現interface
s時經常需要。
我們來看一下Object#equals方法的一個簡單例子。
儘管您的主類有默認範圍,但您不能在覆蓋可見性的同時覆蓋此方法。 所以你需要:public void equals(.......
你的意思是這樣的:
package p1;
class C1 {
public void publicMethod() {}
}
在另一個包:
package p2;
import p1.C1; // not allowed
public class C2 {
C1 c1; // not allowed
void test() {
c1.publicMethod(); // not allowed
}
}
在繼承的情況下,publicMethod
可用於:
package p1;
public class C2 extends C1 {}
現在publicMethod
能訪問:
package p2;
import p1.C2; // C2 is public, ok !
public class C3 {
C2 c2; // C2 is public, ok !
void test() {
c2.publicMethod(); // C2 is public, use publicMethod of C1 !
}
}
因此,減少一個class
可見性對於不應該在包外部直接使用的類型的abtract類是有用的。
你說'如果繼承可以使用publicMethod'。但是如果這個類被聲明爲默認訪問,那麼在它之外的任何方法(甚至是公共的)都可以在包之外訪問。事實上,在包之外,你甚至不能用默認訪問來繼承一個類。 – user3516726 2014-09-21 15:09:51
p1.C2(public)擴展p1.C1(默認)。 p1.C2實例可以在任何包中訪問p1.C1的公共方法。試試看吧。 – 2014-09-21 15:41:10
我覺得有一些誤解。我說的是,默認訪問方法只能從包內部調用,而不能在外部調用。如果你有一個'受保護的'訪問方法,那麼它甚至可以從包的外部被子類調用。 – user3516726 2014-09-21 16:26:04
- 1. Java中公共抽象類中方法的默認訪問級別是什麼?
- 2. 默認(包)訪問級別的類中方法的默認(包)和公共訪問級別是否有區別?
- 3. 默認級別訪問的類內公共方法的用途是什麼?
- 4. scala中的默認公共訪問
- 5. 單身人士訪問私人方法訪問公共方法
- 6. C#:無法訪問私有方法中的公共方法
- 7. 無法訪問默認包中的類
- 8. 爲什麼我無法從班級訪問公共方法? (JAVA)
- 9. BluetoothHeadset - 無法訪問公共方法
- 10. 無法訪問公共靜態方法
- 11. 如何使用Clojure中的interop訪問默認訪問方法?
- 12. 訪問公共方法的目標c
- 13. 訪問公共方法的活動
- 14. 訪問另一個類的公共方法的問題
- 15. 默認類的可訪問
- 16. 爲什麼有多個公共訪問說明符standard_layout的類?
- 17. 無法使用公共IP訪問nginx默認頁面
- 18. 無法訪問基類中的公共方法
- 19. 公共方法無法訪問的公共屬性
- 20. 爲什麼公共靜態方法DragEvent.obtain()不可訪問
- 21. 訪問Java中沒有公共訪問器的私有成員
- 22. Typescript中公共類訪問修飾符的用途是什麼?
- 23. 訪問公共類中的標籤
- 24. 使javascript私有方法可以訪問它的公共方法
- 25. 如何從java中的不同類中的私有類訪問公共方法?
- 26. 對包 - 私有作品的Java默認類訪問如公開
- 27. 無法從片段內部訪問公共類的方法
- 28. JavaScript中訪問其他公共方法內(同一目標)的公共方法
- 29. 如何在JavaScript的公共方法中訪問私有屬性?
- 30. 爲什麼我不能訪問其他類的公共變量?
也許通過[抽象工廠模式](http://en.wikipedia.org/wiki/Abstract_factory_pattern)或[生成器模式](http://en.wikipedia.org/wiki/Builder_pattern)用於創建實例。 – 2014-09-21 14:25:01
低質量問題:[docs](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html) – afzalex 2014-09-21 14:26:16
@afzalex,請不要像'低質量問題'這樣的無理評論回答這個問題..看看其他帖子,人們實際上給出了有意義的答案。 – user3516726 2014-09-21 15:13:04