Selasa, April 16, 2019

Overriding pada Java

Fitur overriding pada pemrograman berorientasi objek memungkinkan subclass atau child class untuk menyediakan implementasi spesifik dari method yang telah disediakan oleh salah satu superclass atau parent class. Ketika method dalam subclass memiliki kesamaan nama, kesamaan parameter atau signature, dan kesamaan tipe return (atau sub-tipe) sebagai method pada superclass, maka method dalam subclass akan disebut sebagai overriding dari method superclass seperti diperlihatkan pada gambar 1.

method overriding pada bahasa Pemrograman Java
Gambar 1 overriding pada Java
sumber : geeksforgeeks.org

Method overriding adalah salah satu cara dari bahasa pemrograman Java untuk mencapai runtime polimorpisme. Versi dari method yang dieksekusi akan ditentukan oleh objek yang digunakan untuk memanggilnya. Jika objek dari parent class digunakan untuk memanggil method, maka versi dalam parent class akan dieksekusi, tetapi jika objek dari subclass yang digunakan untuk memanggil method, maka versi dalam child class akan dieksekusi. Dengan kata lain, tergantung dari tipe objek yang jadi referensi untuk (bukan tipe dari referensi variabel) menentukan versi yang mana dari method overriding yang akan dieksekusi.

Output:
Parent's show()
Child's show()

Aturan dari method overriding:
satu, Overriding dan access-modifier: access modifier untuk method overriding bisa memberikan akses lebih, tetapi tidak kurang daripada method overriding. Contohnya, instance protected method pada superclass dapat dibuat public, tetapi tidak bisa dibuat private, pada subclass. Hal ini juga dapat dilakukan pada compile-time error.

Output:
From parent m2()
From child m2()

dua, Final method tidak bisa overridde: jika tidak ingin method overridde, maka dapat dideklarasikan dalam bentuk final. Penggunaan final dengan inheritance.

Output:
13: error: show() in Child cannot override show() in Parent
    void show() {  }
         ^
  overridden method is final

tiga, Static method tidak bisa overriding (method overriding vs method hiding): ketika mendefinisikan static method dengan signature sama sebagai static method pada base class, maka hal tersebut akan dikenal sebagai method hiding.

Tabel pada gambar 2 memperlihatkan hasil yang didapat ketika mendefinisikan method dengan menggunakan signature sama sebagai method dalam superclass.


tabel override pada bahasa pemrograman Java
Gambar 2 tabel overriding
sumber : geeksforgeeks.org

Output:
From parent static m1()
From child non-static(instance) m2()

empat, Method private tidak bisa overridde: Method private tidak bisa overridde karena method ini terikat selama waktu compile, bahkan tidak juga dapat dilakukan overriding dalam subclass.

lima, Method overriding harus memiliki return tipe yang sama (atau subtipe): Mulai dari tipe Java 5.0 dan seterusnya hingga tipe versi terbaru sangat mungkin untuk memiliki tipe return yang berbeda untuk overriding method dalam child class, tetapi child return tipe harus sub tipe dari parent return tipe. Fenomenaini dikenal dengan istilah covariant return type.

enam, Memanggil overridde method dari subclass: parent class dapat dipanggil dalam method overriding menggunakan keyword super.

Output:
Parent's show()
Child's show()

tujuh, Overriding dan constructor: constructor tidak bisa overriding sebagai parent, serta child class tidak bisa memiliki constructor dengan nama yang sama (nama constructor harus selalu sama dengan nama class).

delapan, Overriding dan Exception-Handling: berikut ini ada dua aturan ketika overriding method terkait dengan exception-handling.
Aturan satu: Jika superclass method overriding tidak memberikan hasil exception, maka subclass overriding method hanya bisa memberikan unchecked exception, jika memberikan checked exception maka akan memerikan compile-time error.

Output:
error: m2() in Child cannot override m2() in Parent
    void m2() throws Exception{ System.out.println("From child m2");}
         ^
  overridden method does not throw Exception

Aturan dua: Jika superclass method overriding tidak memberikan exception, subclass method overriding hanya bisa memberikan hal yang sama juga, yaitu subclass exception. Jika memberikan parent exception dalam exception hirarki akan memberikan compile time error. Dan juga tidak memiliki guna apapun jika subclass overriding tidak memberikan exception apapun.

Output:
error: m1() in Child4 cannot override m1() in Parent
    void m1() throws Exception
         ^
  overridden method does not throw Exception

sembilan, Overriding dan abstract method: abstract method dalam interface atau abstract class akan bermakna sebagai overriding dalam class konkret asal, jika tidak maka akan memberikan compile time error.

sepuluh, Overriding dan synchronized/strictfp method: Kemunculan dari synchronized/strictfp modifier dengan method tidak akan memiliki efek apapun pada aturan overriding. Dengan kata lain, dimungkinkan untuk method synchronized/strictfp dapat overriding non synchronized/strictfp dan juga sebaliknya.

Catatan:
satu, Pada C++, dibutuhkan keyword virtual untuk melakukan overriding atau run time polymorphism. Pada Java, method tersebut bersifat default.
dua, Dapat memiliki multilevel method-overriding.

Output:
GrandChild's show()

tiga, Overriding vs overloading:
#1, Overloading (overload) terkait dengan method sama tetapi signature berbeda. Overriding terkait dengan method sama, signature sama, tetapi class yang terhubung melalui inheritance berbeda seperti diperlihatkan pada gambar 3.

override vs overload pada bahasa pemrograman Java
Gambar 3 overriding vs overloadsumber : geeksforgeeks.org

#2, Overloading adalah contoh dari compiler-time polymorphism dan overriding adalah contoh dari runtime polymorphism.

Kenapa menggunakan method overriding?
Seperti dinyatakan sebelumnya, overridde method memungkinkan Java untuk mendukung runtime polymorphism. Polymorphism adalah hal yang penting pada pemrograman berorientasi objek untuk satu buah alasan, yaitu: memungkinkan penggunaan class umum untuk method spesifik yang akan menjadi acuan umum untuk semua class asalnya. Overriding juga memungkinkan subclass untuk mendefinisikan implementasi spesifik dari beberapa atau seluruh method tersebut. Overriding method adalah cara lain bagi Java untuk implement satu interface, multi method sebagai aspek dari polymorphism.

Dynamic method dispatch adalah salah satu mekanisme powerful dari rancangan berorientasi objek untuk reuse dan robust code. Kemampuan dari keberadaan librari kode untuk memanggil method dalam instance dari new class tanpa melakukan kompilasi ulang ketika maintain sebuah interface abstract adalah sesuatu yang powerful bagi perangkat pengembangan program. 

Overriding method memungkinkan untuk memanggil method dari class asal tanpa mengetahui tipe dari objek class asalnya.

Kapan harus menggunakan overriding method? (beserta contoh)
Overriding dan inheritance: Bagian dari kunci sukses penerapan polymorphism adalah memahami bahwa superclass dan subclass form dari sebuah hirarki yang bergerak dari khusus ke umum. Superclass menyediakan semua elemen yang dapat digunakan subclass secara langsung. Hal ini juga mendefinisikan bahwa class asal harus implement dari dirinya sendiri. Hal ini juga memungkinkan fleksibilitas subclass untuk mendefinisikan method-nya sendiri, namun masih menetapkan interface yang konsisten. Dengan mengkombinasikan inheritance dan overriding method, sebuah superclass dapat mendefinisikan bentuk umum dari method yang akan digunakan oleh semua dari subclass-nya sendiri.

Perhatikan contoh praktis dari penggunaan method overriding. Sebuah software management employee untuk sebuah organisasi, dengan kode program yang memiliki base class Employee sederhana, didalamnya terdapat method seperti raiseSalary(), transfer(), promot(), dan lain sebagainya. Perbedaan tipe dari employee seperti manager, engineer, dan lain sebagainya mungkin memiliki implementasinya masing-masing dari method yang ditampilkan pada base class Employee. Untuk menyempurnakan software, dibutuhkan pencocokan daftar employee dimanapun dan pemanggilan method yang sesuai tanpa perlu mengetahui tipe dari employee. Contoh, user dapat menaikkan salary dari semua employee di dalam class-nya, dimana tidak perlu dikhawatirkan karena jika raiseSalary() ditampilkan untuk tipe employee spesifik, maka hanya method tersebut yang dapat dipanggil seperti diperlihatkan pada gambar 4.

penerapan override method pada contoh program dalam bahasa pemrograman Java
Gambar 4 penerapan overriding method
sumber : geeksforgeeks.org


Output:
Manager's salary : 30000
Clerk's salary : 20000





Tidak ada komentar:

Posting Komentar

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

Footer Adsense