Method Private Overriding Java dan Fungsinya
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();}
}
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();}
}
// 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();}
}
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++
- Pada Java, inner Class diijinkan untuk mengakses anggota data private dari outer class, dimana behavior ini sama seperti C++.
- Pada Java, method yang dideklarasikan sebagai private tidak akan pernah bisa overriding, method tersebut terikat selama waktu kompilasi. Sedangkan behavior ini berbeda dari C++, karena pada C++ memiliki method private virtual.
Bagaimana cara untuk melakukan override method private pada Java?
BalasHapusTidak, 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.
HapusKenapa method private tidak bisa dilakukan override pada Java?
BalasHapusKarena tujuan utama pembautan method private adalah supaya method tersebut tidak bisa dilihat atau diakses oleh class lain, atau memang sengaja dirahasiakan.
HapusApa yang terjadi jika dilakukan override pada method private?
BalasHapusKarena 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.
HapusJika tetap dilakukan maka akan muncul pesan peringatan pada kompilator ketika program tersebut dijalankan.
Hapus