ปรับปรุงการเข้าถึงสกาล่า
Scala และ Java ปรับเปลี่ยนการเข้าถึงเช่นพื้นฐานตามลำดับ: ส่วนตัว, การป้องกันของประชาชน
ถ้าคุณไม่ได้ระบุตัวอักษรเข้าถึงปรับปรุงโดยค่าเริ่มต้นวัตถุระดับการเข้าถึง Scala เป็นสาธารณะ
รอบคัดเลือกสกาล่าในภาคเอกชนเข้าถึงระดับความเข้มงวดกว่า Java ในกรณีของชั้นที่ซ้อนกันชั้นนอกไม่สามารถแม้แต่จะซ้อนส่วนตัวของสมาชิก
เอกชนสมาชิก (Private)
แก้ไขด้วยคำหลักส่วนตัวสมาชิกที่มีเครื่องหมายนี้จะมีเพียงชั้นเรียนหรือวัตถุสมาชิกที่กำหนดไว้ภายในมองเห็นกฎเดียวกันนี้ยังนำไปใช้กับการเรียนภายใน
class Outer{ class Inner{ private def f(){println("f")} class InnerMost{ f() // 正确 } } (new Inner).f() //错误 }
(ใหม่ภายใน) .f () การเข้าถึงไม่ได้ตามกฎหมายในด้านเพราะฉถูกประกาศเป็นส่วนตัว แต่การเข้าถึงไม่ได้อยู่ในหมวดหมู่ของด้านใน
F เข้าถึง แต่มีปัญหาในด้านในสุดไม่เพราะการเยือนครั้งนี้จะรวมอยู่ในระดับชั้นใน
Java ได้รับอนุญาตให้เข้าถึงทั้งเพราะจะช่วยให้การเข้าถึงชั้นนอกส่วนตัวสมาชิกของชั้นเรียนภายใน
ป้องกัน (ป้องกัน) สมาชิก
ใน Scala การป้องกันการเข้าถึง (ล็อก) สมาชิกมีความเข้มงวดกว่าชวา เพราะมันเพียง แต่ช่วยให้การป้องกันของสมาชิกของคลาสย่อยที่มีการกำหนดไว้ในสมาชิกของชั้นเรียนที่มีการเข้าถึง ใน Java ใช้คำหลักสมาชิกที่มีการแก้ไขป้องกันนอกเหนือไปจากความหมายของ subclass ของชั้นเรียนสามารถเข้าถึงสมาชิกกับแพคเกจของการเรียนอื่น ๆ ยังสามารถเข้าถึงได้
package p{ class Super{ protected def f() {println("f")} } class Sub extends Super{ f() } class Other{ (new Super).f() //错误 } }
ตัวอย่างข้างต้นชนิดย่อยของการเข้าถึงไม่ได้เป็นปัญหาสำหรับ F เพราะฉถูกประกาศเป็นการคุ้มครองในซูเปอร์และซูเปอร์ย่อยเป็นประเภทรอง ในทางตรงกันข้าม, อื่น ๆ ไม่ได้รับอนุญาตเข้าถึง F เพราะไม่มีอื่นใดอีกสืบทอดมาจากซูเปอร์ ขณะที่หลังนอกจากนี้ยังได้รับการยอมรับใน java เพราะย่อยอื่น ๆ ในถุงเดียวกัน
สาธารณะสมาชิก (มหาชน)
Scala ถ้าคุณไม่ได้ระบุการปรับเปลี่ยนใด ๆ เริ่มต้นคือประชาชน ดังกล่าวเป็นสมาชิกสามารถเข้าถึงได้ทุกที่
class Outer { class Inner { def f() { println("f") } class InnerMost { f() // 正确 } } (new Inner).f() // 正确因为 f() 是 public }
ขอบเขตของการป้องกัน
Scala, ปรับปรุงการเข้าถึงสามารถเน้นโดยใช้บ่น รูปแบบคือ:
private[x] 或 protected[x]
ที่ X หมายถึงแพคเกจเป็นของชั้นเรียนหรือวัตถุเดี่ยว ถ้าเขียนในภาคเอกชน [x] อ่าน "นอกเหนือจากการเป็นสมาชิกของ [ th. ] หรือในชั้นเรียน [ th. ] ของการเรียนในแพคเกจและรูปภาพที่เกี่ยวข้องของพวกเขาที่มองเห็นด้านนอกสำหรับชั้นเรียนอื่น ๆ ทั้งหมดเป็นส่วนตัว
เทคนิคนี้จะเป็นประโยชน์ในจำนวนของโครงการขนาดใหญ่ในแพคเกจซึ่งจะช่วยให้คุณสามารถกำหนดย่อยแพคเกจในหลายโครงการที่ลูกค้าของคุณสามารถมองเห็นได้จากภายนอก แต่โครงการนี้มีสิ่งที่มองไม่เห็นเสมอ
package bobsrocckets{ package navigation{ private[bobsrockets] class Navigator{ protected[navigation] def useStarChart(){} class LegOfJourney{ private[Navigator] val distance = 100 } private[this] var speed = 200 } } package launch{ import navigation._ object Vehicle{ private[launch] val guide = new Navigator } } }
ตัวอย่างข้างต้น, Navigator ชั้นจะทำเครื่องหมายเป็นส่วนตัว [bobsrockets] นั่นคือระดับของชั้นเรียนและวัตถุทั้งหมดที่มีอยู่ในแพคเกจ bobsrockets ที่มองเห็นได้
ตัวอย่างเช่นจากการเข้าถึงยานพาหนะไปยังวัตถุในนาวิเกเตอร์จะได้รับอนุญาตเพราะยานพาหนะวัตถุที่รวมอยู่ในแพคเกจเปิดตัวในขณะที่ใน bobsrockets เปิดตัวแพคเกจในทางตรงกันข้ามทั้งหมดของรหัสที่อยู่ด้านนอก bobsrockets แพคเกจสามารถเข้าถึง Navigator ระดับ