Pada Java, akan ditampilkan
compiler error jika memberikan banyak batasan akses menuju sebuah fungsi
class derived yang
overriding ke sebuah fungsi
base class. Contohnya, jika terdapat sebuah fungsi public void
foo() dalam
base class dan jika hal itu
overriding dalam
derived class, maka akses spesifikasi
foo() tidak dapat menjadi apapun ketimbang
public pada
derived class. Jika
foo() adalah fungsi
private pada
base class, maka spesifikasi akses untuk
class tersebut dapat berupa apapun dalam
derived class.
 |
Ilustrasi Method Class Derived Java |
Perhatikan dua contoh program berikut.
Program 1 gagal dalam kompilasi dan
Program 2 dapat dikompilasi secara sempurna.
Program 1/* file name: Main.java */
class Base {
public void foo()
{System.out.println("Base");}
}
class Derived extends Base
{
/* kompilator error */
private void foo()
{System.out.println("Derived");}
}
public class Main {
public static void main(String args[])
{Derived d = new Derived();
d.foo();}
}
Output:
Derived
Program 2
/* file name: Main.java */
class Base {
private void foo()
{ System.out.println("Base"); }
}
class Derived extends Base
{
/* program dapat berjalan sempurna */
public void foo()
{System.out.println("Derived");}
}
public class Main {
public static void main(String args[])
{Derived d = new Derived();
d.foo();}
}
Output:
Derived
Artikel ini didedikasikan kepada: Elian Anindia Permatasari, Farisa Nur Rizkika, Gega Agli Dutatama, Herawati Mega, dan Ilham Bashairil Alam.
Apakah mungkin untuk menyembunyikan atau menurunkan tingkat akses ke method yang inheritance pada Java?
BalasHapusKetika melakukan override method, maka hanya bisa dilakukan dalam tipe public, bukan pada tipe private.
HapusKonsep inheritance dapat bekerja karena program dapat menggunakan base class, dimana subclassnya juga dapat digunakan. Behavior-nya mungkin berbeda, tetapi API tidak. Konsep tersebut dikenal dengan istilah Liskov substitusi.
HapusJika dapat dilakukan pembatasan akses ke suatu method, maka class yang dihasilkan tidak akan memiliki API yang sama dan juga tidak dapat digunakan override instance base class untuk salah satu class turunan, dan sudah pasti hal tersebut akan meniadakan keuntungan dari konsep inheritance pada Java.
Mungkin saja, tetapi membutuhkan sedikit manipulasi package dan dapat mengarah pada struktur yang sedikit lebih kompleks daripada yang ingin dikerjakan dalam kepentingan jangka panjang.
Hapusapalah susahnya hanya mengganti tipe private ke tipe public, jangan suka mempersulit diri sendiri. :D
Hapus