Scala - Pengubah Akses

Bab ini membawa Anda melalui pengubah akses Scala. Anggota paket, kelas atau objek dapat diberi label dengan pengubah akses privat dan dilindungi, dan jika kita tidak menggunakan salah satu dari dua kata kunci ini, maka akses akan dianggap sebagai publik. Pengubah ini membatasi akses ke anggota ke wilayah kode tertentu. Untuk menggunakan pengubah akses, Anda memasukkan kata kuncinya dalam definisi anggota paket, kelas atau objek seperti yang akan kita lihat di bagian berikut.

Anggota Pribadi

Anggota pribadi hanya terlihat di dalam kelas atau objek yang berisi definisi anggota.

Berikut adalah contoh potongan kode untuk menjelaskan Anggota pribadi -

Contoh

class Outer {
   class Inner {
      private def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

Di Scala, akses (Inner baru). f () ilegal karena f dideklarasikan privat di Inner dan aksesnya tidak dari dalam kelas Inner. Sebaliknya, akses pertama ke f di kelas paling dalam adalah OK, karena akses tersebut terdapat di badan kelas dalam. Java akan mengizinkan kedua akses tersebut karena ia mengizinkan kelas luar mengakses anggota privat dari kelas dalamnya.

Anggota yang Dilindungi

Anggota yang dilindungi hanya dapat diakses dari subkelas kelas tempat anggota didefinisikan.

Berikut adalah contoh potongan kode untuk menjelaskan anggota yang dilindungi -

Contoh

package p {
   class Super {
      protected def f() { println("f") }
   }
   
   class Sub extends Super {
      f()
   }
   
   class Other {
      (new Super).f() // Error: f is not accessible
   }
}

Akses ke f di kelas Sub tidak apa-apa karena f dinyatakan dilindungi di kelas 'Super' dan kelas 'Sub' adalah subkelas Super. Sebaliknya, akses ke f di kelas 'Lainnya' tidak diizinkan, karena kelas 'Lainnya' tidak mewarisi dari kelas 'Super'. Di Java, akses terakhir masih diizinkan karena kelas 'Lainnya' berada dalam paket yang sama dengan kelas 'Sub'.

Anggota Umum

Tidak seperti anggota privat dan dilindungi, tidak diperlukan untuk menentukan kata kunci publik untuk anggota publik. Tidak ada pengubah eksplisit untuk anggota publik. Anggota tersebut dapat diakses dari mana saja.

Berikut adalah contoh potongan kode untuk menjelaskan anggota publik -

Contoh

class Outer {
   class Inner {
      def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

Lingkup Perlindungan

Pengubah akses di Scala dapat ditambah dengan kualifikasi. Pengubah bentuk private [X] atau protected [X] berarti bahwa akses bersifat pribadi atau dilindungi "hingga" X, di mana X menunjuk beberapa paket, kelas, atau objek tunggal yang melingkupi.

Perhatikan contoh berikut -

Contoh

package society {
   package professional {
      class Executive {
         private[professional] var workDetails = null
         private[society] var friends = null
         private[this] var secrets = null

         def help(another : Executive) {
            println(another.workDetails)
            println(another.secrets) //ERROR
         }
      }
   }
}

Note - poin-poin berikut dari contoh di atas -

  • Variabel workDetails akan dapat diakses oleh semua kelas dalam profesional paket terlampir.

  • Teman variabel akan dapat diakses oleh semua kelas dalam masyarakat paket terlampir.

  • Rahasia variabel hanya dapat diakses pada objek implisit dalam metode instance (ini).