Artikel Terbaru

3 Contoh Program Method Private Overriding pada Java

Perhatikan Program Java berikut untuk penerapan Overriding atau Runtime Polymorphism.

class Base

public void fun() 

{System.out.println("Base"

+" fun");} 

 

class Derived extends Base

public void fun() 

{/* Overriding Base fun() */

System.out.println("Derived"

+" fun");}

 

public static void main(String[] args) { 

Base obj = new Derived(); 

obj.fun();} 

}


Program tersebut akan mencetak "Derived fun". Dimana referensi Base class 'obj' mengacu kepada sebuah object derived class pada Java. Ketika fun() dipanggil dalam obj, maka pemanggilan tersebut dibuat berdasarkan dari tipe object referred, bukan menurut referensi.

Overriding dengan Method Private
Perkirakan hasil output dari program berikut.

class Base 

private void fun() 

{System.out.println("Base"

+" fun");} 

 

class Derived extends Base 

private void fun() 

{System.out.println("Derived"

+" fun");}

 

public static void main(String[] args

{Base obj = new Derived(); 

obj.fun();} 

}


Didapat hasil compiler error "funt() has private access in Base", sehingga kompilator akan mencoba untuk memanggil fungsi base class, bukan derived class, yang artinya fun() tidak overriding.

Inner class dapat mengakses anggota private dari outer class-nya sendiri, contoh pada program berikut, fun() dari inner akan mengakses anggota data private msg yang dapat berjalan lancar pada waktu kompilasi program.

// Program Java

// mendemonstrasikan apakah

// dapat dilakukan overriding

// method private dari outer

// class di dalam inner

// classnya sendiri.

class Outer 

{

 

private String msg = "MakanPindangPatin"

private void fun() 

{System.out.println("Outer"

+" fun()");} 

 

class Inner extends Outer 

private void fun() 

{System.out.println("Mengaks"

+"es anggota private dari"

+" Outer: "

+msg);} 

 

public static void main(String args[]) { 

// untuk menciptakan instance

// dari Inner class,

// dibutuhkan instance Outer

// class. Sehingga, diciptakan

// terlebih dahulu Instance

// outer class dan kemudian

// Instance inner class.

Outer o = new Outer(); 

Inner i = o.new Inner(); 

   

// Akan dilakukan pemanggilan

// Inner fun, dengan tujuan

// untuk menampilkan anggota

// private dari Outer yang

// dapat diakses dari Inner.

i.fun(); 

 

// o.fun() memanggil Outer fun

// (No run-time polymorphism). 

o = i; 

o.fun();}

 

}

Output:
Mengakses anggota private dari Outer: MakanPindangPatin
Outer fun()

Pada contoh program sebelumnya, telah diciptakan outer class dan inner class. Selanjutnya dilakukan extend inner class dari outer dan diciptakan sebuah method fun() pada kedua class outer dan inner. Jika diamati hasil output program, maka dapat dengan jelas dipahami bahwa method fun() tidaklah overriding. Hal ini karena method private terikat selama waktu kompilasi dan merupakan tipe dari referensi variabel, dan bukan tipe dari object yang menentukan method apa yang akan dipanggil. Sebagai catatan tambahan, method private dapat memiliki performa lebih baik dibandingkan dengan method non private dan method non final yang disebabkan oleh static binding.

Perbandingkan Terhadap C++
  • satu, Pada Java, inner Class diijinkan untuk mengakses anggota data private dari outer class, dimana behavior ini sama seperti C++.
  • dua, Pada Java, method yang dideklarasikan sebagai private tidak akan pernah bisa overridingmethod tersebut terikat selama waktu kompilasi. Sedangkan behavior ini berbeda dari C++, karena pada C++ memiliki method private virtual.

Komentar

  1. Bagaimana cara untuk melakukan override method private pada Java?

    BalasHapus
    Balasan
    1. Tidak, tidak bisa dilakukan override method private ataupun static pada Java. Method private pada Java tidak terlihat oleh class lain manapun yang membatasi ruang lingkupnya ke class tempat method tersebut dideklarasikan.

      Hapus
  2. Kenapa method private tidak bisa dilakukan override pada Java?

    BalasHapus
    Balasan
    1. Karena tujuan utama pembautan method private adalah supaya method tersebut tidak bisa dilihat atau diakses oleh class lain, atau memang sengaja dirahasiakan.

      Hapus
  3. Apa yang terjadi jika dilakukan override pada method private?

    BalasHapus
    Balasan
    1. Karena override method berfungsi pada dynamic binding, maka method private tidak mungkin untuk dilakukan override pada Java. Method private bahkan tidak terlihat oleh child class, method private hanya dapat terlihat dan dapat diakses pada class tempat method tersebut dideklarasikan. Keyword private memberikan tingkat enkapsulasi tertinggi dalam bahasa Java.

      Hapus
    2. Jika tetap dilakukan maka akan muncul pesan peringatan pada kompilator ketika program tersebut dijalankan.

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D

Hot Artikel!!!

Enkapsulasi pada Java

6 Tahap Utama dalam Melakukan Kompilasi Program Hello World Java

6 Contoh Program Method Overloading pada Java