Pengubah suai akses skala
Pengubah suai akses Scala pada asasnya sama dengan Java, termasuk: peribadi, dilindungi dan awam.
Jika tiada pengubah suai akses ditentukan, tahap akses objek Scala adalah awam secara lalai.
Kelayakan persendirian dalam Scala adalah lebih ketat daripada Java Dalam kes kelas bersarang, kelas luar bahkan tidak boleh mengakses ahli persendirian kelas bersarang.
Ahli peribadi
diubah suai dengan kata kunci peribadi dengan teg ini hanya boleh dilihat di dalam kelas atau objek yang mengandungi takrifan ahli. Peraturan yang sama juga digunakan dalam kelas.
class Outer{ class Inner{ private def f(){println("f")} class InnerMost{ f() // 正确 } } (new Inner).f() //错误 }
(Bahasa Dalaman baharu).f() Akses adalah menyalahi undang-undang kerana f diisytiharkan sebagai peribadi dalam Dalam, dan akses itu bukan dalam kelas Dalam.
Tetapi tiada masalah untuk mengakses f dalam InnerMost, kerana akses ini termasuk dalam kelas Inner.
Kedua-dua jenis akses dibenarkan di Java kerana ia membenarkan kelas luar mengakses ahli peribadi kelas dalam.
Ahli yang dilindungi
Dalam skala, akses kepada ahli yang dilindungi adalah lebih ketat berbanding di java. Kerana ia hanya membenarkan ahli yang dilindungi untuk diakses dalam subkelas kelas di mana ahli itu ditakrifkan. Di Java, ahli yang diubah suai dengan kata kunci yang dilindungi boleh diakses bukan sahaja oleh subkelas kelas yang mentakrifkan ahli, tetapi juga oleh kelas lain dalam pakej yang sama.
package p{ class Super{ protected def f() {println("f")} } class Sub extends Super{ f() } class Other{ (new Super).f() //错误 } }
Dalam contoh di atas, kelas Sub tidak mempunyai masalah untuk mengakses f kerana f diisytiharkan dilindungi dalam Super dan Sub ialah subkelas Super. Sebaliknya, akses Other kepada f tidak dibenarkan kerana lain tidak mewarisi daripada Super. Yang terakhir ini juga dikenali dalam java, kerana Other dan Sub berada dalam pakej yang sama.
Ahli awam
Dalam Scala, jika tiada pengubah ditentukan, ia lalai kepada awam. Ahli sedemikian boleh diakses dari mana-mana sahaja.
class Outer { class Inner { def f() { println("f") } class InnerMost { f() // 正确 } } (new Inner).f() // 正确因为 f() 是 public }
Perlindungan skop
Dalam Scala, pengubah suai akses boleh ditekankan dengan menggunakan penentu kelayakan. Formatnya ialah:
private[x] 或 protected[x]
x di sini merujuk kepada pakej tertentu, kelas atau objek tunggal. Jika ditulis sebagai persendirian[x], ia dibaca sebagai "Ahli ini persendirian kepada semua kelas lain kecuali kelas dalam [...] atau kelas dalam pakej dalam [...] dan objek pasangannya.
Teknik ini sangat berguna dalam projek besar yang merangkumi beberapa pakej Ia membolehkan anda mentakrifkan sesuatu yang boleh dilihat dalam beberapa subpakej projek anda tetapi sentiasa tidak kelihatan kepada pelanggan di luar projek
Dalam contoh di atas, Navigator kelas ditandakan sebagai [bobsrockets] peribadi, yang bermaksud bahawa kelas ini boleh dilihat oleh semua kelas dan objek yang terkandung dalam pakej bobsrockets Sebagai contoh, Navigator boleh dilihat daripada Kenderaan objek. Akses dibenarkan kerana objek Kenderaan terkandung dalam pelancaran pakej, dan pakej pelancaran berada dalam bobsrockets Sebaliknya, semua kod di luar bobsrockets pakej tidak boleh mengakses Navigator kelas.