Rabu, Mei 22, 2019

Method private overriding pada Java

Perhatikan Program Java sebagai contoh sederhana dari Overriding atau Runtime Polymorphism.

Program tersebut akan mencetak "Derived fun".
Referensi Base class 'obj' mengacu kepada sebuah object derived class (perhatikan ekspresi "Base obj = new Derived()"). Ketika fun() dipanggil dalam obj, pemanggilan tersebut dibuat berdasarkan dari tipe object referred, bukan menurut referensi.

Apakah mungkin Overriding dengan method private?
Perkirakan hasil output dari program berikut.

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

Inner class dapat mengakses anggota private dari outer class-nya sendiri. Bagaimana jika dilakukan extend dari inner class dan menciptakan fun() dalam inner class?

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

Output:
Accessing Private Member of Outer: GeeksforGeeks
Outer fun()

Pada contoh program sebelumnya, telah diciptakan outer class dan inner class. 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 (bukan tipe dari object) yang menentukan method apa yang akan dipanggil. Sebagai catatan tambahan, method private dapat memiliki performa lebih baik (dibandingkan non private dan non final method) disebabkan oleh static binding.

Bandingkan terhadap C++
satu, Pada Java, inner Class diijinkan untuk mengakses anggota data private dari outer class. Behavior ini sama seperti C++.
dua, Pada Java, method yang dideklarasikan sebagai private tidak akan pernah bisa overriding, method tersebut terikat selama waktu kompilasi. Behavior ini berbeda dari C++, karena pada C++ memiliki method private virtual.





Tidak ada komentar:

Posting Komentar

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

Footer Adsense