Jumat, Mei 24, 2019

Referensi object subclass dengan subclass vs referensi superclass

Prasyarat Pengetahuan: Inheritance pada Java

Pada Java, semua non static berdasar pada tipe runtime dari object yang mendasarinya daripada tipe referensi yang menuju ke object. Namun demikian, Tidaklah penting tipe apa yang digunakan dalam deklarasi object karena behavior-nya akan tetap sama.

Bagaimana menghubungkan sebuah object subclass

Ada dua pendekatan untuk menghubungkan sebuah object subclass. Keduanya memiliki kelebihan dan kekurangan terhadap satu sama lain. Dampak deklarasi dapat dilihat dalam method yang tampak pada saat waktu kompilasi.

satu, Pendekatan pertama (referensi yang dilakukan menggunakan referensi superclass): Sebuah variabel referensi dari sebuah superclass dapat digunakan untuk menghubungkan derived object subclass apapun dari superclass-nya. Jika method ditampilkan dalam SuperClass, tetapi overriding oleh subclass, maka overriding method yang akan dieksekusi.

dua, Pendekatan kedua (referensi menggunakan referensi dari subclass): Sebuah referensi subclass dapat digunakan untuk menghubungkan object-nya sendiri.

Perhatikan penjelasan kedua contoh pendekatan berikut ini.

Output:
seat height of first bicycle is 25
No of gears are 3
speed of bicycle is 100
seat height is 25
No of gears are 4
speed of bicycle is 200
seat height is 20

Penjelasan program sebelumnya:

satu, object dari class MountainBike diciptakan dan menggunakan referensi subclass 'mb1'. Dengan menggunakan referensi tersebut maka dapat dilakukan akses pada kedua bagian (method dan variabel) dari definisi object oleh superclass atau subclass. Untuk lebih memahami perhatikan gambar 1 berikut ini.

MountainBike mb1 = new MountainBike(3, 100, 25);

menghubungkan object subclass pada bahasa pemrograman Java
Gambar 1 menghubungkan object subclass 
sumber geeksforgeeks.org

dua, Selanjutnya diciptakan kembali object dari class MountaibBike, tetapi kali ini direferensikan dengan menggunakan referensi Bicycle superclass 'mb2'. Dengan menggunakan referensi ini akan dimiliki akses ahanya ke pada bagian itu saja (method dan variabel) dari definisi object oleh superclass seperti diperlihatkan pada gambar 2.

Bicycle mb2 = new MountainBike(4, 200, 20);

menghubungkan object subclass dengan referensi mb2
Gambar 2 menghubungkan object subclass dengan referensi mb2 
sumber geeksforgeeks.org

tiga, Ketika referensi 'mb1' memiliki akses menuju ke field 'seatHeight', maka dapat dicetak hasilnya.

System.out.println("seat height of first bicycle  is " + mb1.seatHeight);

empat, Jika terdapat method yang ditampilkan pada superclass, tetapi overriding oleh subclass, dan jika object dari subclass diciptakan, maka referensi apapun yang digunakan (baik itu subclass ataupun superclass), maka method overriding dalam subclass akan selalu dieksekusi. Jadi, kedua statement berikut akan memanggil method toString() dari class MountainBike.

System.out.println(mb1.toString());
System.out.println(mb2.toString());

lima, Ketika referensi dibuat oleh 'mb2' dari tipe Bicycle, maka akan didapati waktu kompilasi error pada statement berikut ini.

System.out.println("seat height of second bicycle  is " + mb2.seatHeight);

enam, Lagi, referensi dibuat oleh 'mb2' dari tipe Bicycle, maka akan didapati waktu kompilasi error pada statement berikut.

mb2.setHeight(21);

Penggunakan type casting
Pada contoh sebelumnya, telah dilihat bahwa dengan menggunakan referensi 'mb2' dari tipe Bicycle, maka dapat dipanggil method spesifik subclass atau akses field subclass. Permasalahan tersebut dapat diselesaikan menggunakan tipe casting pada Java. Contohnya, dapat dideklarasikan referensi lain seperti 'mb3' dari tipe MountainBike dan menetapkannya menuju 'mb2' menggunakan typecasting.

/* pendeklarasian referensi MountainBike */
MountainBike mb3;

/* menetapkan mb3 menuju mb2 menggunakan typecasting */
mb3 = (MountainBike)mb2;

Jadi, sekarang statement tersebut sudah bernilai valid.

System.out.println("seat height of second bicycle  is " + mb3.seatHeight);
mb3.setHeight(21);

Kapan digunakan pendekatan pertama (referensi menggunakan referensi superclass)

Jika tidak diketahui runtime yang tepat dari object, maka dapat digunakan pendekatan ini. Contohnya, pertimbangkan ArrayList memiliki object yang berbeda pada beberapa indikasi yang juga berbeda. Sekarang ketika dicoba untuk mendapatkan elemen dari arraylist menggunakan ArrayList.get(int index) method, maka harus digunakan referensi object, pada kasus ini tidak diketahui tipe runtime dari object. Contohnya:

Output:
GeeksForGeeks
5

Keunggulan: dapat digunakan superclass untuk menahan derived object subclass apapun.

Kekurangan: Dengan menggunakan referensi superclass, dapat dimiliki akses hanya ke bagian (method dan variabel) dari definisi object oleh superclass. Contohnya, tidak dapat mengakses seatHeight variabel atau memanggil setHeight(int newValue) method menggunakan referensi Bicycle dalam contoh sebelumnya. Hal ini dikarenakan contoh tersebut didefinisikan dalam subclass tetapi tidak dideklarasikan pada superclass.

Kapan digunakan pendekatan kedua (referensi menggunakan referensi subclass)

Jika diketahui runtime yang pasti dari object, maka pendekatan kedua dapat digunakan. Penggunaan pendekatan ini juga dapat digunakan untuk memanggil method spesifik object tertentu. Contohnya:

Output:
GeeksForGeeks
for java archives
13
java

Keunggulan: dengan menggunakan referensi subclass, maka dapat diakses kedua bagian (method dan variabel) dari definisi object oleh superclass atau subclass. Contohnya, dapat dipanggil setHeight(int newValue) method atau speedUp(int increment) method menggunakan referensi MountainBike dalam contoh sebelumnya.

Kekurangan: Dapat digunakan referensi subclass hanya untuk menahan object subclass tertentu saja.





Tidak ada komentar:

Posting Komentar

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

Footer Adsense