Methods dan Access Specifiers di Java


Outline :

  • Method signature dan Method overloading
  • This keyword
  • class access and access specifiers (public, private, protected)
  • static vs non-static field

    • Method Signature dan Method Overloading

      Definisi Method memiliki 4 bagian yang mendasar yaitu nama method, parameter/argument  method, return type dan body of method.   Berikut ini adalah format dari suatu method :

      returnType methodName(type1 arg1, type2 arg2, type3 arg3 …) {
      	// body of the method
      }
      

      Sedangkan yang dinamakan method signature hanya terdiri dari nama method dan parameter.  Di dalam bahasa pemrograman Java, kita dapat membuat beberapa method dengan nama yang sama di dalam suatu kelas yang sama, akan tetapi tetap harus memiliki method signature yang berbeda. Konsep inilah yang disebut dengan method overloading. Sebagai permulaan anda dapat melihat contoh program dibawah ini :

      Simpan dengan nama : A.java

      public class A {
      	public static void main(String[] args) {
      	}
      
      	//method overloading yaitu method f dengan method signature yang berbeda, f(short, int) dan f(int, short)
      	public void f(short a, int b){
      	}
      
      	public void f(int b, short a){
      	}
      }
      

      //method overloading yaitu method f dengan method signature yang berbeda, f(short, int) dan f(int, short)

      Contoh program diatas menunjukan bahwa ada method overloading yaitu pada method f(short, int) dan method f(int, short). Perhatikan bahwa kedua method ini memiliki nama yang sama namun urutan argument paramaternya berbeda. Akibatnya, Java menganggap ini sebagai dua method yang berbeda. Sekarang coba perhatikan contoh program berikut ini :

      public class A {
      	public static void main(String[] args) {
      	}
      
      	public void f(int a, int b){
      	}
      
      	public void f(int b, int a){
      	}
      }
      

      Program tersebut jika di compile akan menampilkan message error yaitu

      A.java:12: f(int,int) is already defined in Apublic void f(int b, int a){

      ^

      1 error

      Hal ini dikarenakan kedua method tersebut ternyata memiliki method signature yang sama walaupun nama variable pada parameternya berbeda. Sekarang Anda telah memiliki pengetahuan mengenai apa itu method signature dan kaitannya dengan method overloading.

      Catatan : constructor juga dapat di-overload.

      Pertanyaan

      1. Setelah memahami penjelasan diatas, sekarang apa output dari program dibawah ini dan berikan penjelasan atas jawaban anda :
      public class A {
      	public static void main(String[] args) {
      	}
      
      	public void f(int a, int b){
      	}
      
      	public String f(int a, int b){
      	return "Object String";
      	}
      }
      
        • This keyword

          Di dalam pemrograman Java, kata kunci ‘this’ digunakan untuk me-refer pada object yang sedang diakses pada saat itu. Mungkin akan lebih mudah memahami jika anda melihat langsung pada contoh program. Berikut contoh penggunaan keyword ‘this’

          public class A {
          	public static void main(String args[]){
          		B objectB1 = new B();
          		System.out.println(“Object B1″);
          		System.out.println(“nilai x pada objectB1 adalah ” + objectB1.getX());
          		System.out.println(“nilai y pada objectB1 adalah ” + objectB1.getY());
          		B objectB2 = new B(2, -4);
          		System.out.println(“Object B2″);
          		System.out.println(“nilai x pada objectB2 adalah ” + objectB2.getX());
          		System.out.println(“nilai y pada objectB2 adalah ” + objectB2.getY());
          	}
          }
          
          class B{
          	int x = 5;
          	int y = 10;
          
          	B(){
          	}
          
          	B(int a, int b){
          		this.x = a;
          		this.y = b;
          	}
          
          	public int getX() {
          		return this.x;
          	}
          
          	public int getY() {
          		return this.y;
          	}
          }
          

          Program diatas akan menghasilkan output :

          Object B1nilai x pada objectB1 adalah 5

          nilai y pada objectB1 adalah 10

          Object B2

          nilai x pada objectB2 adalah 2

          nilai y pada objectB2 adalah -4

          Penjelasan :

          Perhatikan bahwa pada method getX() dan getY() terdapat keyword this. Akibatnya, ketika objectB1 memanggil method getX() maka method getX() akan mengembalikan nilai variable x milik objectB1 yaitu 5. Sedangkan ketika objectB2 memanggil method getX() maka nilai variable yang dikembalikan adalah nilai x yang dimiliki objectB2 yaitu 2.

          Sekarang coba anda modifikasi program diatas dengan menghilangkan semua keyword this.  Maka output yang dihasilkan akan tetap sama. Akan tetapi coba tambahkan suatu argument pada method getX() seperti dibawah ini :

          //seandainya nama variablenya sama
          public int getX(int x) {
          	return x;
          }
          

          Dan sesuaikan pemanggilan method getX() yang berada di dalam method main dengan menambahkan satu argument sebagai parameternya. Misalkan :

          B objectB1 = new B();
          System.out.println(“Object B1″);
          System.out.println(“nilai x pada objectB1 adalah ” + objectB1.getX(-1));
          System.out.println(“nilai y pada objectB1 adalah ” + objectB1.getY());
          B objectB2 = new B(2, -4);
          System.out.println(“Object B2″);
          System.out.println(“nilai x pada objectB2 adalah ” + objectB2.getX(-1));
          System.out.println(“nilai y pada objectB2 adalah ” + objectB2.getY());
          

          Sekarang nilai x yang dihasilkan objectB1 dan objectB2 yaitu -1. Hal ini dikarenakan variable x yang di kembalikan adalah variable x yang berada pada scope method tersebut.

          Sekarang, anda dapat mencoba dengan menambahkan keyword this pada method getX(int x) menjadi :

          public int getX(int x) {
          	return this.x;
          }
          

          Lalu perhatikan perubahannya. Ternyata nilai x diberikan adalah nilai dari variable x yang dimiliki oleh object yang bersangkutan bukan nilai x yang berasal dari parameter.

          Pertanyaan :

          1. Buat Sebuah program dengan spesifikasi sebagai berikut :
            1. Buatlah kelas Buku yang memiliki variable judul [String], jumlah [int], dan harga[int].
            2. Buatlah 4 buah Constractor yaitu tanpa parameter, 1 buah parameter, 2 buah parameter dan 3 buah parameter.
            3. Buat accessor method dan mutator method dari Kelas Buku tersebut (get dan set) dengan mengaplikasikan keyword ‘this’.
          2. Buatlah method getTotalHarga(); dengan return value berupa int yaitu jumlah*harga.
          3. Lengkapi javadoc pada program anda
          • class access and access specifiers

            Modifier menunjukan apakah suatu kelas lain dapat menggunakan atau mengakses variable-variable/field maupun method-method yang terdapat dalam suatu kelas. Contoh modifier adalah public, private dan lain-lain. Terdapat beberapa pembagian untuk modifier, namun sekarang kita hanya akan membahas mengenai access modifier dan class modifier.

            Access Modifier, terdiri dari default (tidak ada modifier), public, protected, dan private.

            1. Default modifier berarti hanya kelas-kelas yang berada dalam satu package yang dapat mengakses method-method dan variable-variable dari kelas tersebut
            2. Public modifier berarti semua kelas dapat mengakses method-method dan variable-variable
            3. Protected modifier berarti hanya subclass dan kelas-kelas yang dalam satu package yang dapat mengakses method dan variable
            4. Private modifier, tidak ada kelas lain yang dapat mengakses variable atau method pada kelas dengan modifier ini

            Access Modifier berlaku untuk kelas, variable dan method

            Class Modifier, terdiri dari public, abstact dan final

            1. Public, kelas dapat diakses oleh kelas apa saja
            2. Abstract, kelas tersebut tidak dapat dibuat objeknya
            3. Final, kelas tersebut tidak dapat diturunkan

            Class Modifier berlaku untuk kelas

            • Static versus non static

            Keyword static dapat digunakan untuk method ataupun variable. Jika keyword static digunakan untuk variable maka variable tersebut diasosiasikan dengan kelas dan digunakan secara bersama-sama untuk objek-objek dari kelas tersebut. Sedangkan jika static digunakan pada sebuah method maka method tersebut dapat diakses melalui kelas tanpa harus membuat objeknya. Berikut contohnya :

            public class A{
            	public static void main(String[] args) {
            		B o1 = new B();
            		o1.x = 5;
            		o1.y = 10;
            		System.out.println(“Object petama”);
            		System.out.println(“x : ” + o1.x + “,” + “y : ” + o1.y);
            		B o2 = new B();
            		System.out.println(“Object Kedua”);
            		System.out.println(“x : ” + o2.x + “,” + “y : ” + o2.y);
            		o1.y = 100; //variable y pada object 1 menjadi 100
            		o1.x = 100; //variable x pada object 1 menjadi 100
            		System.out.println(“Object Kedua”);
            		System.out.println(“x : ” + o2.x + “,” + “y : ” + o2.y);
            		//untuk memanggil method f melalui nama kelasnya
            		B.f();
            		//sedangkan untuk memanggil method f melalui objek yang dibuat
            		o1.f();
            		o2.f();
            	}
            }
            
            class B{
            	int x = 0;
            	static int y = 0;
            	public static void f(){
            		//method static f()
            	}
            	
            	public void g(){
            		//method bukan static
            	}
            }
            

            Penjelasan :

            Variable y memiliki modifier static. Hal ini mengakibatkan setiap object yang dibuat hanya memiliki satu variable y yang digunakan secara bersama-sama. Perhatikan output dari program ini pada variable y. jika variable y pada object pertama diubah maka variable y pada object kedua pun akan ikut berubah dan seterusnya.

            Static modifier pada method mengakibatkan method dapat diakses secara langsung melalui kelasnya. Pada method f dengan modifier static, cara pemanggilannya pun dapat dilakukan langsung melalui kelasnya yaitu B.f();

            Pertanyaan :

            1. Program di bawah ini merupakan program untuk menyelesaikan program Tower Of Hanoi.
              1. Lengkapi baris Program sehingga keluaran sesuai dengan output yang diharapkan.
              2. Lengkapi javadoc untuk setiap class dan method yang ada

            TowersOfHanoiTest.java

            public class TowersOfHanoiTest
            {
            	public static void main(String[] args) {
            		int startPeg = 1;
            		int endPeg = 3;
            		int tempPeg = 2;
            		int totalDisks = 3;
            		//buat Objek dari kelas TowerOfHanoi dengan parameter totalDisks
            		…………………………………………………..
            		//memanggil method solveTowers melalui Objek yang telah dibuat sebelumnya dengan parameter totalDisks, startPeg, endPeg, dan tempPeg
            		……………………………………………………
            	}
            }
            

            TowersOfHanoi.java

            //tambahkan atau ubah access specifier jika dibutuhkan

            public class TowersOfHanoi
            {
            	int numDisk;
            	static int numStep = 0;
            	private TowersOfHanoi(int disks)
            	{
            		this.numDisk = disks;
            	}
            	
            	private static void solveTowers(int disks, int sourcePeg, int destinationPeg, int tempPeg)
            	{
            		if (disks == 1)
            		{
            			numStep++;
            			System.out.println(“langkah ke-” + numStep + ” : ” + sourcePeg + ” –> ” + destinationPeg);
            			return;
            		}
            	
            		solveTowers(disks – 1, sourcePeg, tempPeg, destinationPeg);
            		numStep++;
            		System.out.println(“langkah ke-” + numStep + ” : ” + sourcePeg + ” –> ” + destinationPeg);
            		solveTowers(disks – 1, tempPeg, destinationPeg, sourcePeg);
            	}
            }
            

            Output yang diharapkan :

            >java TowersOfHanoiTestlangkah ke-1 : 1 –> 3

            langkah ke-2 : 1 –> 2

            langkah ke-3 : 3 –> 2

            langkah ke-4 : 1 –> 3

            langkah ke-5 : 2 –> 1

            langkah ke-6 : 2 –> 3

            langkah ke-7 : 1 –> 3

            1. Apakah keyword ‘this’ dapat digunakan untuk memanggil sconstructor ? Berikan penjelasan Anda dilengkapi dengan contoh program.
              • fadhil mubarak
              • June 13th, 2010

              kekurangan contoh program kelas public dengan method non staticnya tuh

              • fadhil mubarak
              • June 14th, 2010

              banyak kerancuan dalam artikelmu

            1. ok.. kalau anda baca contoh2 program di awal2 pasti banyak class yang tipenya public dan methodnya non-static. Saya tidak ingin memberikan contoh yang berulang2 sehingga memusingkan pembaca…🙂

            2. ^^
              kalau masalah kerancuan ada dibagian yang mana ya.. nanti akan segera saya perbaiki sehingga orang lain yang membacanya tidak ikut tersesat🙂

              thanks atas perhatiannya

            1. No trackbacks yet.

            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

            %d bloggers like this: