Pada tulisan saya yang sebelumnya : Deklarasi Java class dan java class modifiers, saya sudah membahas mengenai access modifiers untuk class. Di tulisan tersebut saya juga sedikit menyinggung mengenai members. Sebenarnya apakan yang dimaksud dengan members itu sendiri ?

Members adalah method dan state dari suatu class. Jika kalian belum mengetahui apa itu method dan state, sebaiknya baca tulisan ini terlebih dahulu : Beberapa istilah dasar di Java.

Seperti yang sudah saya jelaskan di tulisan mengenai Deklarasi Java class dan java class modifiers, pada class hanya terdapat 2 Access modifier, sedangkan untuk members tersedia 4 access modifier yang dapat digunakan. Keempat modifier tersebut adalah default, public, protected dan private. Sekarang akan saya jelaskan lebih lanjut mengenai keempat modifier tersebut.

  1. Default. Coba perhatikan contoh code berikut ini. Pertama buatlah sebuah public class Test di package com.maniakjava.testdefault.
    package com.maniakjava.testdefault;
    public class Test
    {
       void say() //method ini dideklarasikan default
       {
          System.out.println("Hello world");
       }
    }
    

    Kemudian buatlah sebuah class MainInside pada package yang sama.

    package com.maniakjava.testdefault;
    
    public class MainInside
    {
       public static void main(String[] args)
       {
          Test obj = new Test();
          obj.say();
       }
    }
     

    Coba jalankan class MainInside tersebut. Maka output yang keluar adalah : Hello world. Sekarang coba buat sebuah class MainOutside yang terletak di package yang berbeda dengan class Test.

     package com.maniakjava.main;
    
    import com.maniakjava.testdefault.Test;
    
    public class MainOutside
    {
       public static void main(String[] args)
       {
          Test obj = new Test();
          obj.say();
       }
    }
    
    

    Coba jalankan class MainOutside tersebut. Maka kalian akan mendapat pesan error : Exception in thread “main” java.lang.RuntimeException: Uncompilable source code – say() is not public in com.maniakjava.testdefault.Test; cannot be accessed from outside package.

Sudah mengerti kan apa fungsi dari default modifier ? Dengan menggunakan default modifier, maka members dari suatu class hanya bisa diakses oleh class2 lainnya yang berada di package yang sama.

  1. Public. Untuk mengetahui lebih jelas kegunaan public modifier, sekarang cobalah ubah source code class Test menjadi seperti ini :
    public class Test
    {
       void say() //method ini dideklarasikan public
       {
          System.out.println("Hello world");
       }
    } 

    Lalu jalankan kembali class MainOutside di atas, maka sudah tidak akan ada error lagi alias class Test sudah bisa diakses oleh class yang berada di package yang berbeda. Jadi fungsi public modifier adalah untuk membuat members bisa diakses oleh class2 dari package manapun.

  2. Private. Untuk mengetahui lebih jelas kegunaan private modifier, sekarang cobalah ubah source code class Test menjadi seperti ini :
    package com.maniakjava.testdefault;
    public class Test
    {
       private void say() //method ini dideklarasikan private
       {
          System.out.println("Hello world");
       }
    }
    

    Lalu jalankan class MainInside yang berada di package yang sama dengan class Test. Maka kalian akan mendapat pesan error : Exception in thread “main” java.lang.RuntimeException: Uncompilable source code – say() has private access in com.maniakjava.testdefault.Test. Sekarang coba ubah code class Test menjadi seperti ini :

    package com.maniakjava.testdefault;
    
    public class Test
    {
       private void say()
       {
          System.out.println("Hello world");
       }
    
       public static void main(String[] args)
       {
          Test obj = new Test();
          obj.say();
       }
    } 

    Lalu jalankan class Test di atas, output yang dihasilkan adalah : Hello world. Jadi dengan menggunakan modifier private, maka members hanya bisa diakses oleh class yang mendeklarasikan members tersebut. Tidak ada class lain yang bisa mengakses members yang dideklarasikan private, meskipun berada di package yang sama.

  3. Protected. Untuk mengetahui lebih jelas kegunaan protected modifier, sekarang cobalah ubah source code class Test menjadi seperti ini :
    package com.maniakjava.testdefault;
    public class Test
    {
       protected void say() //method dideklarasikan protected
       {
          System.out.println("Hello world");
       }
    }
     

    Kemudian jalankan lagi class MainInside yang berada di package yang sama dengan class Test. Tidak akan ada error yang muncul, output yang keluar adalah Hello world. Sekarang jalankan class MainOutside yang berada di package yang berbeda. Kalian akan mendapat pesan error : Exception in thread “main” java.lang.RuntimeException: Uncompilable source code – say() has protected access in com.maniakjava.testdefault.Test. Lalu bagaimana supaya class MainOutside bisa mengakses method yang bersifat protected? Ubahlah code MainOutside menjadi seperti ini :

    package com.maniakjava.main;
    
    import com.maniakjava.testdefault.Test;
    
    public class MainOutside extends Test
    {
       public static void main(String[] args)
       {
          MainOutside q = new MainOutside();
          q.say();
       }
    }
    

    Kemudian jalankan class MainOutside di atas, maka sudah tidak akan ada error lagi.

    Jadi modifier protected menyebabkan suatu members dapat diakses oleh class2 yang berada di package yang sama atau berbeda (melalui proses inheritance terlebih dahulu).

Comments
  1. […] kegunaan dari keywoed private dan public kan ? Jika belum silahkan baca tulisan saya mengenai Members dan access modifiers untuk members. Dari disain class baru tersebut terlihat kan jika variable speed hanya bisa diisi dengan angka […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s