ขอบเขตเริ่มต้นของวิธีการใน Java คืออะไร?


166

ถ้าฉันพิมพ์:

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

ขอบเขตเริ่มต้นของdoThis()คืออะไร

สาธารณะ? มีการป้องกัน? เอกชน?

คำตอบ:


264

ขอบเขตเริ่มต้นคือแพ็คเกจส่วนตัว คลาสทั้งหมดในแพ็คเกจเดียวกันสามารถเข้าถึงเมธอด / field / class แพ็คเกจ - ส่วนตัวเข้มงวดกว่าขอบเขตที่ได้รับการป้องกันและสาธารณะ แต่อนุญาตได้มากกว่าขอบเขตส่วนตัว

ข้อมูลเพิ่มเติม:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
"แพ็คเกจเริ่มต้นเข้มงวดกว่า ... "
reinaldoluckman

7
อาจเป็นมูลค่าการกล่าวขวัญว่า "แพคเกจส่วนตัว" เป็นขอบเขตที่ดีที่จะใช้เมื่อเปิดเผยวิธีการทดสอบหน่วยภายนอก
Gary Rowe

1
หากเป็นกรณีนี้เหตุใดจึงจำเป็นต้องเปิดเผยสิ่งใดต่อสาธารณะเว้นแต่คุณกำลังสร้างการสร้างห้องสมุดหรือสิ่งใดที่ผู้ใช้จะได้รับการทำงานสำหรับรหัสของพวกเขา
แดเนียล

2
@ user3858162 แอปพลิเคชันที่ไม่น่าสนใจส่วนใหญ่ถูกจัดระเบียบเป็นหลายแพ็คเกจซึ่งในกรณีนี้จำเป็นต้องใช้ขอบเขตสาธารณะสำหรับการโทรวิธีการโทรจากแพ็คเกจอื่น ๆ
Esko Luontola

19

สิ่งใดก็ตามที่กำหนดเป็นแพ็คเกจส่วนตัวสามารถเข้าถึงได้โดยคลาสเองคลาสอื่น ๆ ภายในแพ็กเกจเดียวกัน แต่ไม่ได้อยู่นอกแพ็คเกจและไม่ใช่คลาสย่อย

ดูหน้านี้สำหรับตารางตัวดัดแปลงระดับการเข้าถึงที่สะดวก ...


9

หากไม่มีตัวแก้ไขการเข้าถึงสมาชิกของคลาสจะสามารถเข้าถึงได้ทั่วแพ็คเกจซึ่งประกาศไว้ คุณสามารถเรียนรู้เพิ่มเติมจากJava Language Specification, §6.6

สมาชิกของอินเทอร์เฟซสามารถเข้าถึงได้โดยสาธารณะไม่ว่าจะประกาศอย่างชัดเจน


5

ขอบเขตเริ่มต้นคือ "เริ่มต้น" มันแปลก - ดูข้อมูลอ้างอิงเหล่านี้ สำหรับข้อมูลเพิ่มเติม


3
ที่จริงแล้วมันไม่ใช่: มันเป็นแพคเกจส่วนตัว
Maurice Perry

2
ฉันไม่สามารถลบคำตอบได้เนื่องจากได้รับการยอมรับแล้ว ฉันสนับสนุนให้ Joe ตอบคำถามของ @ Esko!
Michael Haren

1
ลิงค์ที่สองใช้งานไม่ได้ (และ btw มันง่ายที่จะพลาดว่าเป็นลิงค์สองลิงค์)
idclev 463035818

1

Java 8 ตอนนี้อนุญาตให้ใช้งานเมธอดภายในอินเตอร์เฟสด้วยขอบเขตเริ่มต้น (และแบบสแตติกเท่านั้น)


0

หากคุณไม่ได้ให้ตัวดัดแปลงใด ๆ กับวิธีการของคุณแล้วเป็นค่าเริ่มต้นมันจะเป็นตัวดัดแปลงเริ่มต้นที่มีขอบเขตภายในแพคเกจ
สำหรับข้อมูลเพิ่มเติมคุณสามารถอ้างอิงhttp://wiki.answers.com/Q/What_is_default_access_specifier_in_Java

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.