Cara Menggunakan Overriding Java dan Fungsinya
// Contoh program sederhana
// dari program Java
// mendemonstrasikan method
// overriding.
/* Base Class */
class Parent
{
void show(){
System.out.println("Parent"
+" show()");}
}
/* Inherited class */
class Child extends Parent
{
// method overriding show()
// dari Parent.
@Override
void show() { System.out.println("Child"
+" show()"); }
}
/* Driver class */
class Main
{
public static void main(String[] args)
{
// Jika tipe parent referensi
// mengacu pada parent objek,
// maka parent show akan
// dipanggil.
Parent obj1 = new Parent();
obj1.show();
// Jika tipe parent referensi
// mengacu pada child objek,
//maka child show akan
// dipanggil.
// Hal ini disebut dengan
// runtime polymorphism.
Parent obj2 = new Child();
obj2.show();
}
}
Child show()
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. Dimana hal ini akan menyebabkan compile-time error.
// Contoh program Java yang
// mendemonstrasikan
// overriding dan
// access-modifier.
class Parent
{
// method private tidak
// overriding.
private void m1() {
System.out.println("Dari"
+" parent m1()");}
protected void m2() {
System.out.println("Dari"
+" parent m2()"); }
}
class Child extends Parent
{
// new m1() method bersifat
// unik untuk child class.
private void m1(){
System.out.println("Dari "
+"child m1()");}
// method overriding dengan
// lebih banyak aksesibilitas.
@Override
public void m2(){
System.out.println("Dari "
+"child m2()");}
}
/* Driver class */
class Main
{
public static void main(String[] args)
{
Parent obj1 = new Parent();
obj1.m2();
Parent obj2 = new Child();
obj2.m2();
}
}
Dari child m2()
Baca Juga:
// Program Java
// mendemonstrasikan final
// method tidak bisa
// overriding.
class Parent
{
/* tidak bisa overriding */
final void show() { }
}
class Child extends Parent
{
/* akan menghasilkan error */
void show() { }
}
void show() { }
^
overridden method is final
Tabel pada tabel 1 memperlihatkan hasil yang didapat ketika mendefinisikan method dengan menggunakan signature sama sebagai method dalam superclass.
// Program Java memperlihatkan
// jika method static
// diredefinisi oleh class
// asalnya, maka hasilnya
// tidak overriding, tetapi
// hiding.
class Parent
{
// method static dalam base
// class yang akan tersembunyi
// (hidden) dalam subclass.
static void m1(){
System.out.println("Dari"
+" parent static m1()");}
// Non-static method yang akan
// overriding dalam class
// asalnya.
void m2(){
System.out.println("Dari"
+" parent non-static"
+"(instance) m2()");}
}
class Child extends Parent
{
// method ini menyembunyikan
// m1() dalam parent.
static void m1(){
System.out.println("Dari "
+"child static m1()");}
// method ini overriding m2()
// dalam parent.
@Override
public void m2(){
System.out.println("Dari "
+"child non-static"
+"(instance) m2()");}
}
/* Driver class */
class Main
{
public static void main(String[] args)
{Parent obj1 = new Child();
// Jika sesuai aturan
// overriding seharusnya
// memanggil static class
// child overriding method.
// Namun karena static method
// tidak bisa overriding, maka
// dipanggil calls Parent's
// m1().
obj1.m1();
// Overriding dapat bekerja
// dan memanggil Child's m2().
obj1.m2();}
}
Dari child non-static(instance) m2()
empat, Method private tidak bisa overridde: Method private tidak bisa overridde karena method ini terikat selama waktu kompilasi, 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.
// Program Java
// mendemonstrasikan bahwa
// overriding method dapat
// dipanggil dari subclass.
/* Base Class */
class Parent
{
void show(){
System.out.println("Parent"
+" show()");}
}
/* Inherited class */
class Child extends Parent
{
// method overriding show()
// dari Parent.
@Override
void show(){
super.show();
System.out.println("Child"
+" show()");}
}
/* Driver class */
class Main
{
public static void main(String[] args){
Parent obj = new Child();
obj.show();}
}
Child show()
tujuh, Overriding dan constructor: constructor tidak bisa overriding sebagai parent, serta child class tidak bisa memiliki constructor dengan nama yang sama atau 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, dan jika memberikan checked exception maka akan memerikan compile-time error.
// Program Java
// mendemonstrasikan
// overriding ketika
// superclass method tidak
// mendeklarasikan exception.
class Parent
{
void m1(){
System.out.println("Dari"
+" parent m1()");}
void m2(){
System.out.println("Dari"
+" parent m2()"); }
}
class Child extends Parent
{
@Override
// Tidak ada pesan ketika
// memberikan unchecked
// exception.
void m1() throws ArithmeticException
{System.out.println("Dari"
+" child m1()");}
@Override
/* Compile-time error */
// Muncul pesan ketika
// memberikan checked
// exception.
void m2() throws Exception
{System.out.println("Dari"
+" child m2");}
}
- 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.
// Program Java
// mendemonstrasikan
// overriding ketika
// superclass method
// mendeklarasikan exception.
class Parent{
void m1() throws RuntimeException{
System.out.println("Dari"
+" parent m1()");}
}
class Child1 extends Parent{
@Override
// tidak memiliki fungsi
// apapun jika memberikan
// exception yang sama.
void m1() throws RuntimeException
{System.out.println("Dari"
+" child1 m1()");}
}
class Child2 extends Parent{
@Override
// tidak memiliki fungsi
// apapun jika memberikan
// subclass exception.
void m1() throws ArithmeticException
{System.out.println("Dari"
+" child2 m1()");}
}
class Child3 extends Parent{
@Override
// tidak memiliki fungsi
// apapun jika tidak
// memberikan exception apapun.
void m1()
{System.out.println("Dari"
+" child3 m1()");}
}
class Child4 extends Parent{
@Override
/* compile-time error */
// muncul pesan ketika
// memberikan parent exception.
void m1() throws Exception
{System.out.println("Dari"
+" child4 m1()");}
}
// Program Java
// mendemonstrasikan
// multi-level overriding.
/* Base Class */
class Parent {
void show() {
System.out.println("Parent"
+" show()"); }
}
/* Inherited class */
class Child extends Parent {
// Method overriding show()
// dari Parent.
void show() {
System.out.println("Child"
+" show()"); }
}
/* Inherited class */
class GrandChild extends Child {
// Method overriding show()
// dari Parent.
void show() {
System.out.println("GrandCh"
+"ild show()"); }
}
/* Driver class */
class Main {
public static void main(String[] args) {
Parent obj1 = new GrandChild();
obj1.show(); }
}
- #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 2.
- #2, Overloading adalah contoh dari compiler-time polymorphism dan overriding adalah contoh dari runtime polymorphism.
Alasan Menggunakan Method Overriding
Alasan Harus Menggunakan Overriding Method
// Program Java sederhana yang
// mendemonstrasikan aplikasi
// dari overriding.
/* Base Class */
class Employee {
public static int base = 10000;
int salary()
{return base;}
}
/* Inherited class */
class Manager extends Employee {
// method overriding show()
// dari Parent.
int salary()
{return base + 20000;}
}
/* Inherited class */
class Clerk extends Employee {
// method overriding show()
// dari parent.
int salary()
{return base + 10000;}
}
/* Driver class */
class Main {
// method ini dapat digunakan
// untuk mencetak salary
// apapun dari employee
// menggunakan base class
// reference.
static void printSalary(Employee e)
{System.out.println(e.salary());}
public static void main(String[] args){
Employee obj1 = new Manager();
// Dapat digunakan untuk
// mendapatkan tipe dari
// employee menggunakan lebih
// banyak overriding
// method.loke getType().
System.out.print("Penghasilan"
+" Manager : ");
printSalary(obj1);
Employee obj2 = new Clerk();
System.out.print("Penghasilan"
+" Clerk : ");
printSalary(obj2);}
}
- Static Method dan Instance Method Java dan Fungsinya
- Cara Menentukan Nilai Variabel Static Final Java dan Fungsinya
- Return Covariant Java dan Fungsinya
- Object Class Java dan Fungsinya
- Perbedaan Static Class dan Non Static Class Java
- java.lang.Object dan Fungsinya
- Program Overriding Method Equal Java dan Fungsinya
6 komentar untuk "Cara Menggunakan Overriding Java dan Fungsinya"
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 -
Kenapa tidak bisa dilakukan override pada method static Java?
BalasHapusOverloading adalah suatu mekanisme yang sifatnya mengikat panggilan method dengan body method secara dinamis berdasarkan parameter yang diteruskan ke method panggilan. Method static terikat pada waktu dilakukan kompilasi program menggunakan pengikatan yang sifatnya static. Oleh karena itu, maka tidak dapat dilakukan overriding pada method static Java.
HapusMethod apa saja yang tidak bisa dilakukan override pada program Java?
BalasHapusMethod yang dinyatakan dalam bentuk final tidak bsia dilakukan override pada java. Method yang telah dideklarasikan static tidak dapat diganti tetapi dapat dilakukan pendeklarasian ulang pada program. Jika sebuah method tidak dapat diwariskan, maka method tersebut juga tidak dapat di override. Subclass dalam package yang sama dengan superclass instance dapat dilakukan override pada superclass method apapun yang tidak dideklarasikan sebagai private atau final.
HapusApakah mungkin melakukan override pada constructor Java?
BalasHapusConstructor memang terlihat seperti sebuah method namun sebenarnya tidak. Constructor tidak memiliki tipe kembalian dan namanya juga sam dengan nama class. Namun demikian, constructor tidak bisa dilakukan override. Jika ingin melakukan penulisan constructor pada sub class, maka kompilator akan memperlakukannya sebagai method dan akan mengharapkan tipe kembalian atau tipe return dan akan menghasilkan compile time error.
Hapus