Latest web development tutorials

ปรับปรุงการเข้าถึงสกาล่า

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] อ่าน "นอกเหนือจากการเป็นสมาชิกของ [ ... ] หรือในชั้นเรียน [ ... ] ของการเรียนในแพคเกจและรูปภาพที่เกี่ยวข้องของพวกเขาที่มองเห็นด้านนอกสำหรับชั้นเรียนอื่น ๆ ทั้งหมดเป็นส่วนตัว

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

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 ระดับ