Lompat ke konten Lompat ke sidebar Lompat ke footer

Method Private Overriding Java dan Fungsinya

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.

Sebelum lebih lanjut mempelajari materi tentang Method Private Overriding Java dan Fungsinya, terlebih dahulu pelajari materi tentang: Interface dan Inheritance Java dan Fungsinya, Menggunakan Final Inheritance Java dan Fungsinya, dan Mengakses Anggota Grandparent Java Menggunakan Keyword Super.

Dalam pemrograman berorientasi objek, konsep overriding adalah salah satu fitur yang memungkinkan kelas turunan (subclass) untuk memberikan implementasi yang berbeda untuk metode yang sudah didefinisikan di kelas induk (superclass). Java mendukung overriding untuk metode-metode yang bersifat publik (public), dilindungi (protected), dan paket (default). Namun, dengan penambahan Java 9, Java memperkenalkan konsep overriding baru yang disebut "private overriding". Mari jelajahi lebih dalam tentang konsep ini.

Pengertian

Sebelum Java 9, metode-metode yang dideklarasikan sebagai private dalam kelas induk tidak dapat diakses atau diubah oleh kelas turunan. Namun, dengan penambahan Java 9, Java memperkenalkan kemampuan untuk meng-overriding metode-metode private dalam kelas-kelas turunan yang sama.

Cara Implementasi Method Private Overriding

Pengembang dapat mengimplementasikan metode private overriding dengan cara yang mirip dengan overriding metode publik, dilindungi, atau paket. Namun, ada beberapa hal yang perlu diperhatikan:
  • Nama dan Tipe Metode Harus Sama: Metode yang di-overriding harus memiliki nama dan tipe yang sama persis dengan metode yang didefinisikan dalam kelas induk. Jika tidak, ini akan dianggap sebagai deklarasi baru.
  • Aksesibilitas: Metode overriding dapat memiliki aksesibilitas yang lebih luas daripada metode yang di-overriding, tetapi tidak dapat memiliki aksesibilitas yang lebih sempit. Misalnya, pengembang tidak dapat mengubah metode private menjadi metode publik saat overriding.

Contoh:

class Parent {


private void display() {

System.out.println(

"Parent's display()");}


public void invokeDisplay() {

// Memanggil metode display()

// di dalam kelas induk.

display(); }

}


class Child extends Parent {

private void display() {

System.out.println(

"Child's display()");}

}


public class Main {

public static void 

main(String[] args) {

Child obj = new Child();


// Memanggil metode

// invokeDisplay() dari

// kelas Child.

obj.invokeDisplay(); 

}


}

Berdasarkan contoh tersebut, metode display() dalam kelas Parent bersifat private, dan mencoba untuk meng-overriding metode ini di kelas Child. Meskipun menggunakan nama dan tipe yang sama, ini bukan overriding, tetapi deklarasi baru. Jadi, ketika memanggil invokeDisplay() dari objek Child, metode yang dipanggil adalah display() dari kelas Parent.

Contoh: 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

Contoh: 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 kompilator error "funt() has private access in Base", sehingga kompilator akan mencoba untuk memanggil fungsi base class, bukan derived class, yang artinya fun() tidak overriding.


Contoh:

// 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++:
  • 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 overridingmethod tersebut terikat selama waktu kompilasi. Sedangkan behavior ini berbeda dari C++, karena pada C++ memiliki method private virtual.

Fungsi Method

Method private overriding dapat berguna dalam beberapa skenario, terutama dalam penggunaan pola desain seperti Template Method atau Builder Pattern. Dalam kasus ini, metode private di superclass mungkin berperan dalam implementasi metode publik yang kompleks. Dengan mengizinkan kelas turunan untuk meng-overriding metode private, pengembang dapat memperluas atau memodifikasi perilaku metode publik tanpa harus mengubah implementasi yang rumit dalam kelas induk.

Meskipun method private overriding membawa fleksibilitas tambahan dalam desain dan implementasi kelas, ada beberapa kekurangan yang perlu dipertimbangkan:
  • Keterbatasan Aksesibilitas: Metode yang di-overriding harus memiliki tingkat aksesibilitas yang sama atau lebih luas daripada metode yang didefinisikan dalam kelas induk. Karena metode private memiliki tingkat aksesibilitas yang paling terbatas, kelas turunan hanya dapat mengakses metode private tersebut melalui panggilan ke metode yang tidak bersifat private dalam kelas induk. Ini mungkin membatasi fleksibilitas dalam merancang kelas turunan.
  • Kebingungan dan Kesalahan: Penggunaan method private overriding dapat menyebabkan kebingungan dan kesalahan dalam kode, terutama jika tidak dipahami dengan baik. Pengembang yang tidak menyadari adanya overriding private mungkin berpikir bahwa method tersebut sedang membuat metode baru, padahal method tersebut sebenarnya hanya mengganti metode yang ada dalam implementasi yang tidak dapat diakses.
  • Penggunaan yang Kurang Umum: Meskipun method private overriding menawarkan fleksibilitas tambahan, penggunaannya tidak seumum method overriding standar. Oleh karena itu, penggunaan yang berlebihan atau tidak tepat dapat membuat kode menjadi sulit dipahami dan sulit dipelihara oleh pengembang lain.
  • Kompleksitas Pemahaman: Konsep method private overriding dapat meningkatkan kompleksitas pemahaman dalam kode, terutama untuk pengembang yang kurang berpengalaman. Memahami bagaimana metode private dapat diubah dalam kelas turunan dan bagaimana aksesibilitasnya dipengaruhi oleh konsep overriding dapat memerlukan waktu dan usaha tambahan.

Saat menggunakan method private overriding, penting untuk mempertimbangkan dengan hati-hati kebutuhan dan tujuan desain, serta memastikan bahwa konsep ini digunakan dengan bijaksana untuk menghindari kompleksitas dan kesalahan yang tidak diinginkan dalam kode.

Kesimpulan

Method private overriding adalah fitur baru yang diperkenalkan dalam Java 9 yang memungkinkan kelas turunan untuk meng-overriding metode-metode private dari kelas induk. Ini memungkinkan fleksibilitas tambahan dalam desain dan implementasi kelas-kelas dalam hirarki warisan. Namun, perlu diingat bahwa sifat private dari metode-metode ini tetap membatasi aksesibilitasnya hanya dalam batas kelas tersebut.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Deviana Puput Saputri, Elian Anindia Permatasari, Farisa Nur Rizkika, Gega Agli Dutatama, dan Herawati Mega.

7 komentar untuk "Method Private Overriding Java dan Fungsinya"

  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

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -