Minggu, Mei 16, 2021

Akses Terbatas Menuju Method Class Derived pada Java

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.

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();} 

}


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

5 komentar:

  1. Apakah mungkin untuk menyembunyikan atau menurunkan tingkat akses ke method yang inheritance pada Java?

    BalasHapus
    Balasan
    1. Ketika melakukan override method, maka hanya bisa dilakukan dalam tipe public, bukan pada tipe private.

      Hapus
    2. Konsep 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.

      Jika 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.

      Hapus
    3. Mungkin saja, tetapi membutuhkan sedikit manipulasi package dan dapat mengarah pada struktur yang sedikit lebih kompleks daripada yang ingin dikerjakan dalam kepentingan jangka panjang.

      Hapus
    4. apalah susahnya hanya mengganti tipe private ke tipe public, jangan suka mempersulit diri sendiri. :D

      Hapus

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