Abstract Class dan Interface

apa pertanyaan dan jawaban yg menarik yg saya temukan di Kaskus mengenai abstract dan Interface.. apa perbedaan keduanya dan kapan kita menggunakan masing masing. dan dibawah ini jawabannya :

pertanyaan : dengan menggunakan contoh objek mobil dan oplet yang tadi pernah d buat d atas, muncul pertanyaan ini:

1. kapan saya harus menggunakan extends atau interface?
2. gimana perbedaan karakteristik subclass yang meng-extends dengan yang meng-implement interface

jawaban 1 dari box:

pertanyaan bagus … langsung nonjok ke OO conceptnya…
blajar core java kalo dah bisa C/VB.. mungkin sminggu juga cukup.. tapi gimana blajar OO-nya.. sminggu mungkin tau teorinya.. tapi pas praktek… hehehehe.. pastinya bakal ngebolak balik tuh buku n tutorial lagi.. tapi kalo dah sampe sini.. bisa dibilang welcome to java .. and later on.. java ga cuman programming language… tapi sebuah platform .. welcome in a world dimana smuanya ditulis dengan java…

dan balik ke pertanyaannya…
1. untuk kasus Mobil dan Oplet
Mobil cocok buat jadi interface dan oplet cocok buat jadi realisasi (class yang meng-implement) dari Mobil..
kenapa?
Interface bisa dibilang sesuatu yang generic yang berisi kontrak yang dimiliki oleh suatu objek.. misalnya… untuk kasus Mobil
smua mobil bisa ganti gigi
smua mobil bisa distater
smua mobil bisa dimatiin mesinnya
dan smua2 yang laen yang merupakan behaviour dari Mobil
jadi Mobil meng-cover smua generic behaviour..

Oplet sebagaimana Sedan mempunyai semua properti2 mobil karena ntu Oplet dan Sedan dua2nya implements Mobil..

pertanyaan selanjutnya.. knapa ga dibikin class Mobil aja trus Oplet dan Sedan tinggal extends Mobil…
mungkin ga salah juga… tapi mari kita lihat dimana polymorphism memegang peranan
tadi diatas dibahas kalo Oplet dan Sedan sama2 bisa ganti gigi…
pertanyaannya.. apakah cara ganti giginya sama?
jawabannya belum tentu… Sedan ada yang model matic [gua ga tau cara ganti giginya Oplet gimana๐Ÿ˜› ].. tapi yang pasti cara ganti giginya belom tentu sama…

nah disini makanya kita pake model interface di Mobil sehingga di class yang meng-implement spreti Sedan dan Oplet kita bisa bikin implementasi yang spesifik.. tapi keduanya tetep mengikuti kontrak yang udah disepakati di Mobil.. yaitu ganti gigi

kalo pake analogi Binatang (interface).. cara larinya Zebra (class) dan Ayam (class) dah pasti beda.. cuman dua2nya sama2 binatang dan duanya sama2 bisa lari…

pertanyaan kedua..
mungkin sbelomnya ada juga pertanyaan.. “trus kapan donk pake inheritance (extends)?”
secara gamblang inheritance adalah turunan.. dimana si anak punya behaviour dari si parent.. definisinya se kliatannya mudah.. cuman kapan dipake.. trus apa maxud sbenernya…

kalo pake definisi bebas gua (sori yak.. ni maxudnya biar gampang aja).. inheritance dipake kalo kita butuh versi yang lebih spesifik dari class yang kita punya…
ambil Contoh.. Mobil

kita punya Mobil, which is an interface..
trus kita punya Sedan, Oplet which is a class.. misalkan kita tambah satu lagi.. Bus, yang notabene juga Mobil.. trus kita mo tipe Bus yang spesifik.. tarolah Bussway dengan behaviour tambahannya seperti bukaPintuPenumpangSebelahKanan() ato bunyikanPengumumanHalte()

disini kita mau Bussway, yang juga adalah Bus tapi dengan tambahan spesifiknya dia (spesialisasi).. dan jadilah dia extends Bus

konsep dasar OO.. sperti encapsulation, inheritance, dan polymorphism is really2 nice..

and satu lagi.. dalam mendesain bukan masalah benar atau salah.. cuman aja kadang satu desain lebih bagus dari yang lainnya… sperti kata bang napi.. “banyak jalan ke roma..”

jawaban 2 dari -gianconere- :

Interface itu gampangnya bukan class..
sedangkan abstract class itu class setengah jadi..

Jadi urutannya
interface(0%) – abstract class (50%) – class(100%)

Karena abstract class adalah class yg udah hampir jadi(50%), maka bisa dilihat perbedaannya dengan interface yg bukan sama sekali class(0%)..

1. Abstract class boleh punya attribut, sedangkan interface tidak boleh punya attribut (hanya boleh punya konstanta).

2. Abstract class boleh punya methode yg sudah diimplementasikan, sedangkan interface tidak boleh punya methode yg sudah diimplementasikan

3. Abstract class punya constructor, sedangkan interface tidak

4.Sebuah class hanya boleh mengextend dari satu abstract class tapi boleh mengimplementasikan banyak interface..

tambahan dari -gianconere- :

setuju, menurut saya yg lebih membingungkan adalah bagaimana mendesign suatu program yg object oriented ketimbang cuman belajar strukturnya saja..

Tapi dari contoh yg dipaparkan om box ttg interface mobil, saya kok agak kurang setuju ya dgn menjadikan mobil sebagai interface (walaupun itu sebenernya sah2 saja). Tapi saya rasa tidak pas menjadikan mobil sebagai interface..

kenapa?
karena class2 yg dicontohkan mengimplementasikan interface mobil yaitu oplet,bus,sedan adalah class2 yg saling berhubungan. Mereka mempunyai attribut dan methode yg sama dari sebuah class mobil. Yang ini artinya mereka lebih tepat extend dari class mobil.

Ini sangat berbeda dengan misalnya kita punya interface Flyer (sesuatu yg bisa terbang). Dimana interface Flyer ini punya method2 seperti takeoff(),land(),fly().
Nah class Flyer ini menurut saya sangat cocok menjadi interface..
Kenapa?
Karena class2 yg saling tidak terhubung bisa mengimplementasikan method yg sama..
Misalnya : class Airplane, class Bird, class Superman..
Airplane inherit dari class vehicle, Bird inherit dari class Animal, Superman inherit dari class Kryptonian. Yang ini jelas antar class2 ini sangat tidak berhubungan karena vehicle, Animal dan Kryptonian punya attribut dan methode yg berbeda..

Dari penjelasan saya diatas, itu kenapa menurut saya mobil tidak pas utk dijadikan contoh sebagai interface..

Mobil dalam kasus ini menurut saya lebih cocok dijadikan abstract class..
kenapa?
Kalo tujuannya hanya ingin mengoverride method gantigigi() kan bisa hanya dengan menjadikan gantigigi() sebagai abstract.
Jadi method gantigigi() dibuat sebagai abstract method, agar kelas2 turunannya bisa mengoverride method gantigigi ini..

Itu menurut pendapat saya(-gianconere-). Mohon koreksinya bila salah
Topik yg lain saya liat2 saja sambil belajar
————————————————–
kalau dari saya pribadi interface bukanlah kelas, namun cara menggunakannya harus diimplement dan membuat interface itu sama hal nya kita membuat aturan, dimana aturan itu nantinya bisa digunakan diberbagai kelas yg berbeda yg harus mempunyai metode yang sama, contoh interface Database. maka didalamnya ada insert,udpate,delete,getAll, lalu interface itu di implement ke class mysql,oracle,acces,postgre,dll dan tinggal menggani statement atau perintah sqlnya saja…fungsinya untuk memudahkan java dalam konsep polymorphism(banyak bentuk). jadi bila pertama memakai database mysql, dan kita ingin berpindah ke oracle maka tinggal mengganti yang tadinya menginstance mysql skrng menginstance oracle yang mempunya interface yang sama. jadi untuk berpindah dari satu database kedatabase lain tidaklah begitu sulit atau memakan waktu lama.
kalau abstract class itu class setengah jadi, dipakai langsung boleh dan kalau diextends ke kelas turunannya juga boleh.kalau diturunkan maka class abstract tersebut harus dioverride..
cmiiw juga..๐Ÿ™‚
sumber : kaskus.us
HOME / LOEKELOE / COMPUTER STUFF / Programmer Forum
[ask][java] kepingin blajar java dari A-Z page 3-5

9 Komentar (+add yours?)

  1. Fin
    Mar 16, 2011 @ 11:37:14

    Terima kasih mas bahrie, sy java beginner nih..
    dr dulu sy bertanya2 secara logic kpn2 kt menggunakan abstract n interface.
    mudah dipahamin n sangat jelas, keep posting n do best!

    Rgrs, Fin

    Balas

  2. Belajar
    Nov 21, 2012 @ 21:17:27

    Kenapa java tidak bisa extends lebih dari satu kelas?
    Help….

    Balas

    • bahrie
      Nov 22, 2012 @ 08:54:48

      supaya jelas siapa bapaknya atau class induknya..๐Ÿ˜€ contoh seperti di dunia nyata.. masak ada anak yang lahir dari 2 ayah.? yang namanya ayah pasti satu.. anak bisa banyak.๐Ÿ˜€ OOP itu menarapkan logika dalam kehidupan.

      Balas

  3. Aeros
    Apr 10, 2013 @ 10:31:15

    Reblogged this on fawwaz's blogs and commented:
    Nice finally lumayan lebih ngerti meski kemaren kemaren nyarislide pak saiful tentang analogy interface di colokan power system di amerika gak dapet dapet๐Ÿ˜€

    Balas

  4. similar webpage
    Mei 02, 2013 @ 17:41:32

    Hey there! I just wanted to ask if you ever have any trouble with
    hackers? My last blog (wordpress) was hacked
    and I ended up losing several weeks of hard work due to no backup.

    Do you have any methods to prevent hackers?

    Balas

  5. mady
    Okt 08, 2013 @ 19:24:44

    wah saya sdh lama makai java, tapi kadang memutuskan untuk makai interface atau abstract class menjadi sesuatu yang membingungkan.. terimakasih dengan penjelasannya mastah…….

    Balas

  6. hartoto dinata
    Okt 28, 2013 @ 07:40:33

    mantap gan penjelasannya… mau terus dah…

    Salam,
    Hartoto
    http://www.xbasicpro.com

    Balas

  7. Trackback: Diskusi mengenai Perbedaan Abstract Class dan Interface | COMPUTER SCIENCE

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: