Memahami Modifiers dan Kontrol Akses Pada Java

Apa itu modifiers dalam pemrograman Java?

Modifiers adalah keyword istimewa yang bisa memodifikasi definisi (dan perilaku) dari class, metode atau variabel.

Beberapa diantaranya mungkin sering anda temui dalam kode Java, berikut ini adalah modifier:
  • Modifier untuk mengontrol akses terhadap class method atau variabel disebut juga acces modifiers  diantaranya yaitu public, protected, default dan private.
  • Modifier non-acces static untuk membuat method dan variabel dari class.
  • Modifier non-acces abstract untuk membuat class dan method abstract.
  • Modifier non-acces final untuk menyelesaikan implementasi dari class, method dan variabel
  • Modifiers non-acces synchronized dan volatile yang digunakan untuk thread.
  • Modifiers non-acces native yang digunakan untuk membuat method native.
Seperti anda lihat di atas, beberapa modifiers hanya dapat diaplikasikan hanya pada class dan method atau hanya pada method dan variabel.

belajar_java_acces_modifiers


Untuk menggunakannya setiap modifiers tersebut, anda bisa meletakkkannya sebelum definisi dari class method atau variabel seperti contoh di bawah ini:

a) public class Jambu extend Buah {......}
b) private boolean matang;
c) static final double BERAT = 1.25;
d) protected static final int JUMLAH = 10;
e) public static void main (String args []) {
................
}

Penempatan modifier ini biasanya mengikuti urutan:

<Akses> static abstract synchronized volatile final native, dimana <Akses> ini bisa saja berupa public protected atau private, namun tidak boleh lebih dari satu akses.

Kali ini hanya akan dibahas mengenai acces modifiers yaitu public, protected, default dan private.

public dan default

public modifier artinya bisa diakses dimana saja. Method atau variabel dengan modifier ini dapat diakses pada class dimana method atau variabel itu didefinisikan, dapat diakses oleh subclass dari class, dapat diakses oleh semua class pada package yang sama atau oleh class lain diluar package tersebut, intinya bisa diakses dimanapun.

Jika anda tidak menggunakan modifier apapun, maka ini adalah default, dimana modifier ini hanya bisa diakses di dalam package yang sama.

public hampir sama dengan default, keduanya mengizinkan method dan variabel untuk dapat diakses oleh class lain di dalam package yang sama. Perbedaan akan muncul ketika anda membuat package-package dari class.

Ketika anda akan menggunakan class di luar package dimana class tersebut berada melalui statement import, maka hal ini tidak akan bisa dilakukan sebelum class dalam package itu dideklarasikan sebagai public.

Perhatikan contoh di bawah ini:

class Buah dideklarasikan public dan berada pada package com.bahasaJava.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package com.bahasaJava;

public class Buah {
 
 private String nama;

 public void setNamaBuah(String namaBuah) {
  nama = namaBuah;
 }
 
 public String getNamaBuah() {
  return nama;
 }
 
 public void tampilkanPesan(){
  System.out.println("Nama buah adalah: " + getNamaBuah());
 }
 
}

Kemudian class TestBuah berada di dalam package test seperti di bawah ini.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package test;

//statement import untuk menggunakan class diluar package
import com.bahasaJava.Buah;

public class TestBuah {
 
 public static void main(String args []){
  
  Buah buah = new Buah();
  buah.setNamaBuah("Anggur");
  buah.tampilkanPesan();

 }

}

Perhatikan bahwa class Buah harus dideklarasikan secara public (line 3) agar dapat digunakan oleh class TestBuah yang berada pada package berbeda, karena jika tidak demikian, maka class Buah dianggap memiliki acces modifier default yang hanya bisa diakses pada package yang sama, dan akan terjadi error yang menyatakan bahwa class Buah "not visible".

private

Ini adalah acces modifier yang paling ketat. private artinya method dan variabel hanya dapat diakses oleh class yang sama. Variabel instance dengan acces modifier private hanya dapat digunakan oleh method pada class yang sama, namun tidak dapat dilihat atau digunakan oleh class atau objek lainnya.

Method private dapat dipanggil oleh method lainnya di dalam class yang sama namun tidak bisa dipanggil oleh class lainnya. Sebagai tambahan baik method atau variabel private tidak bisa di wariskan atau inherited kepada subclass-nya.

Perhatikan contoh di bawah ini, di mana class Buah dan class Test Buah berada pada package yang sama yaitu com.bahasaJava. Method tampilkanPesan() memiliki acces modifier default dan ketika method ini akan diakses oleh class berbeda yaitu class TestBuah maka akan terjadi error yang menyatakan bahwa method itu "not visible".

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package com.bahasaJava;

public class Buah {
 
 String nama = "Anggur";
 
 private void tampilkanPesan(){
  System.out.println("Nama buah adalah : " + nama );
 }
 
}


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
package com.bahasaJava;

public class TestBuah {
 
 public static void main(String args []){
  
  Buah buah = new Buah();
  
  //variabel instance nama dari class Buah memiliki 
  //acces modifier default
  //sehingga dapat diakses dalam package yang sama
  //oleh class berbeda
  System.out.print(buah.nama);
  
  //Method tampilkanPesan not visible karena 
  //acces modifier adalah private
  buah.tampilkanPesan();//Error disini
  
 }

}

Sebagai catatan:
Acces modifier private bisa digunakan pada constructor class, namun jika ini digunakan anda tidak bisa membuat objek di luar class tersebut.

protected

Acces modifier protected artinya bisa diakses di dalam package ataupun di luar package namun hanya melalui inheritance (atau pewarisan yang merupakan salah satu konsep penting pemrograman Java).

protected tidak bisa diaplikasikan pada class, namun bisa diaplikasikan pada data field, method dan contructor.

Perhatikan contoh sederhana berikut ini:

class Buah berada pada package com.bahasaJava dan memiliki acces modifier protected untuk method tampilkanPesan();


1
2
3
4
5
6
7
8
9
package com.bahasaJava;

public class Buah {
 
 //Acces modifier protected
 protected void tampilkanPesan(String warna){
  System.out.println("Warna buah adalah: " + warna);
 }
}


class Apel berada pada package test dan inherit dari class Buah (menggunakan keyword extends), di sini objek dari class Apel menggunakan method tampilkanPesan dari class Buah.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package test;

import com.bahasaJava.Buah;

public class Apel extends Buah {
 
 private String warna = "Merah";
 
 public static void main(String args []){
  Apel apel = new Apel();
  apel.tampilkanPesan(apel.warna);
 }
}


Kesimpulan

Karena perbedaan dari beberapa acces modifiers tersebut dapat membuat pusing, terutama pada bagian protected method dan variabel, maka tabel berikut ini bisa membantu anda untuk mengklarifikasi tipe proteksi di atas.


java_acces_modifiers
Java acces modifieers


No comments

Bahasa Java. Powered by Blogger.