Apa yang kamu ketahui tentang inheritance

Posted on Mei 17, 2011 Updated on Juni 15, 2011

Atau pewarisan pada pemrograman berorientasi objek merupakan  suatu hubungan dua buah kelas atau lebih. Dalam hal ini ada kelas yangmemiliki atribut dan metode yang sama dengan kelas lainnya beserta atributdan  metode  tambahan  yang  merupakan  sifat  khusus  kelas  yang  menjaditurunannya

1. Inheritance (Pewarisan) merupakan salah satu dari tiga konsep dasar OOP.2. Konsep inheritance ini mengadopsidunia riil dimana suatu entitas/obyek 3. dapat mempunyai entitas/obyek turunan.Dengan konsep inheritance, sebuahclass dapat mempunyai class turunan.

  1. PemrogramanBerorientasiObjek
    Inheritance (Pewarisan)
  2. Pengertian Inheritance Proses pewarisan data dan method dari suatu kelas kepada kelas yang lain Class yg mewariskanSuperclass

    Class yg diwariskan Subclass

  3. Keyword Extends bentukumumpada Java : <hakakses> class <subclass> extends <superclass> Contoh : public class mobilextendsKendaraanBermotor bentukumumpada C++ : class <subclass> : <hakakses> <superclass> contoh :

    class mobil : public kendaraan_bermotor

  4. Keyword Super
    untuk memanggil konstruktor dan method oleh subclass yang dimiliki oleh superclass
    • Bentuk umum untuk memanggil konstruktor :

    super ()
    super(parameter)

    • Bentuk umum untuk memanggil method :

    super.method(parameter)

  5. Jenis-Jenis Inheritance Single Inheritance (Pewarisan Tunggal) Multiple Inheritance (PewarisanJamak)

    Virtual Multiple Inheritance (PewarisanJamak Maya)

  6. Single Inheritance (Pewarisan Tunggal) Adalah pewarisan yang jumlah kelas dasarnya (basic class / superclass) tunggal, tapi kelas turunan (subclass) bisa lebih dari satu

    Konsep inheritance yang ada di Java hanya memperkenankan adanya single inheritance.

  7. Single Inheritance (Pewarisan Tunggal)
  8. Syntax Single Inheritance C++ JAVA class A { . . . }; class B : public A { . . . } class A { . . . }; Public class B extends A { . . .

    }

  9. Contoh Single Inheritance ( Java ) public class Komputer { String Processor; int Monitor; intHardDisk; int Memory; public intgetHardDisk() { return HardDisk; } public void setHardDisk(intHardDisk) { this.HardDisk = HardDisk; } public intgetMemory() { return Memory; } public void setMemory(int Memory) { this.Memory = Memory; } public intgetMonitor() { return Monitor; } public void setMonitor(int Monitor) { this.Monitor = Monitor; } public String getProcessor() { return Processor; } public void setProcessor(String Processor) { this.Processor = Processor; }

    }

  10. Contoh Single Inheritance ( Java ) public class Laptop extends Komputer{ String typeBattery; intdurasiBattery; public intgetDurasiBattery() { return durasiBattery; } public void setDurasiBattery(intdurasiBattery) { this.durasiBattery = durasiBattery; } public String getTypeBattery() { return typeBattery; } public void setTypeBattery(String typeBattery) { this.typeBattery = typeBattery; }

    }

  11. Contoh Single Inheritance ( Java ) public class Circle { private double radius; Circle(double r) { //Constructor radius = r; } Circle() { //Constructor radius = 1.0; } public double getRadius() { return radius; } public double findArea() { return radius*radius*3.14; }

    }

  12. Contoh Single Inheritance ( Java ) public class Cylinder extends Circle { private double length; public Cylinder() { //Constructor super(); length = 1.0; } public Cylinder(double r,double l) { //Constructor super(r); length = l; } public double getLength() { return length; } public double findArea() { System.out.println(“Call Cylinder find Area”); return 2*super.findArea()+2*getRadius()*3.14159*length; } public double findVolume() { return findArea() * length; }

    }

  13. Contoh Single Inheritance ( Java ) public class Test { public static void main(String [] Args) { //Create Cylinder object and display it’s properties Cylinder myCylinder = new Cylinder(5.0,2.0); System.out.println(“The length : “+myCylinder.getLength()); System.out.println(“The radius : “+myCylinder.getRadius()); System.out.println(“The Cylinder Volume : “+myCylinder.findVolume()); System.out.println(“The area of Circle : “+myCylinder.findArea()); }

    }

  14. Multiple Inheritance (PewarisanJamak) Kelas yang diturunkan lebih dari satu kelas yang berbeda (jumlahkelas dasarnya lebih dari satu) Java tidak mendukung Multiple Inheritance C++ mendukung Multiple Inheritance Java menggunakan interface untuk menggantikan konsep multiple inheritance

    Multiple Interface Inheritance

  15. Multiple Inheritance (PewarisanJamak)
  16. Syntax Multiple Inheritance class A { . . . }; class B { . . . } class C: public A, public B { . . .

    }

  17. Contoh Multiple Inheritance (C++) class ayah{ public: void rambut(){ cout<<“>RambutnyaKeriting”<<endl; } }; class ibu{ public: void kulit(){ cout<<“>KulitnyaPutih”<<endl; }

    };

  18. Contoh Multiple Inheritance (C++) class anak : public ayah, public ibu{ public: void hidung(){ cout<<“>Hidunganakitumancung”<<endl<<endl; } }; class cucu : public ayah, public ibu{ public: void pandai(){ cout<<“>CucudariKakekdanNenekitupandaiberhitung”<<endl<<endl; }

    };

  19. Virtual Multiple Inheritance Kelas yang diturunkan lebih dari satu kelas yang berbeda (jumlah kelas dasarnya lebih darisatu)

    Hanyasaja, beberapa diantara kelas dasar tersebut merupakan kelas turunan dari kelas dasar yang sama

  20. Virtual Multiple Inheritance
  21. Syntax VirtualMultiple Inheritance class A { . . . }; class B: virtual public A { . . . }; class C: virtual public A { . . . }; class D: public B, public C { . . .

    };

  22. Contoh Virtual Multiple Inheritance class hewan { public: void bergerak() { cout<<” # Bergerakberpindahtempat”<<endl; } }; class kuda: virtual public hewan { public : void berlari() { cout<<” # Berlarinyasangatcepat”<<endl; } }; class burung: virtual public hewan { public: void terbang() { cout<<” # Terbangmenembusawan”<<endl; } }; class pegasus: public kuda, public burung { public: void lariterbang() { cout<<“# Bersayap, laridandapatterbangkeangkasa”<<endl; }

    };

  23. Hal yg perlu dipertimbangkan saat mewariskan method : Jika method disuperclass PUBLIC makasemua subclass bersifat PUBLIC Jika method disuperclass PROTECTED maka bisa menjadi PROTECTED atau PUBLIC untuksemua subclass Jika method disuperclass DEFAULT maka pada subclass bisamenjadi PRIVATE Jika method disuperclass PRIVATE, maka tidak bisa diwariskan

    Hubungan antara Akses dan Inheritance

  24. HakAkses Subclass danSuperclass
  25. Selesai

Referensi : //www.slideshare.net/Goenz/inheritance

                          //www.scribd.com/doc/44969884/Pengertian-Inheritance-Bu-R

                         //tiaraindraswari.blogspot.com/search/label/PBO%20Semester4

Seperti yang sudah kita pelajari pada tulisan sebelumnya: sebuah class atau objek bisa saling berhubungan dengan class yang lain.

Salah satu bentuk hubungannya adalah inheritance (pewarisan). Hubungan ini seperti hubungan keluarga antara orang tua dan anak.

Sebuah class di Java, bisa memiliki satu atau lebih keturunan atau class anak. Class anak akan memiliki warisan properti dan method dari class ibu.

Pada tutorial ini kita akan belajar:

  1. Kenapa kita harus menggunakan inheritance?
  2. Contoh Program inheritance
  3. Method Overriding

Mari kita mulai…

Kenapa Kita Harus Menggunakan Inheritance?

Misalkan dalam Game, kita akan membuat class-class musuh dengan perilaku yang berbeda.

Lalu kita membuat kode untuk masing-masing kelas seperti ini:

File: Zombie.java

class Zombie { String name; int hp; int attackPoin; void attack(){ // ... } void walk(){ //... } }

File: Pocong.java

class Pocong { String name; int hp; int attackPoin; void attack(){ // ... } void jump(){ //... } }

File: Burung.java

class Burung { String name; int hp; int attackPoin; void attack(){ // ... } void walk(){ //... } void jump(){ //... } void fly(){ //... } }

Apakah boleh seperti ini?

Ya, boleh-boleh saja. Akan Tapi tidak efektif, karena kita menulis berulang-ulang properti dan method yang sama.

Bagaimana solusinya?

Kita harus menggunakan inheritance.

Mari kita lihat memeber class yang sama:

Setelah menggunakan inheritance, maka akan menjadi seperti ini:

Oya, inheritance di StarUML digambarkan dengan garis hubung Generalization.

Class Enemy adalah class induk yang memiliki anak Zombie, Pocong, dan Burung. Apapun properti yang ada di class induk, akan dimiliki juga oleh class anak.

Lalu bagaimana bentuk kodenya dalam Java?

Bentuk kodenya akan seperti ini:

File: Enemy.java

class Enemy { String name; int hp; int attackPoin; void attack(){ System.out.println("Serang!"); } }

Pada class anak, kita menggunakan kata kunci extends untuk menyatakan kalau dia adalah class turunan dari Enemy.

File: Zombie.java

class Zombie extends Enemy { void walk(){ System.out.println("Zombie jalan-jalan"); } }

File: Pocong.java

class Pocong extends Enemy { void jump(){ System.out.println("loncat-loncat!"); } }

File: Burung.java

class Burung extends Enemy { void walk(){ System.out.println("Burung berjalan"); } void jump(){ System.out.println("Burung loncat-loncat"); } void fly(){ System.out.println("Burung Terbang..."); } }

Lalu, bila kita ingin membuat objek dari class-class tersebut, Kita bisa membuatnya seperti ini:

Enemy monster = new Enemy(); Zombie zumbi = new Zombie(); Pocong hantuPocong = new Pocong(); Burung garuda = new Burung();

Setelah memahami konsep inheritance, sekarang mari kita buat contoh program sederhana.

Program yang akan kita buat untuk berfungsi untuk menghitung luas dan keliling bangun datar.

Bentuk class diagramnya seperti ini:

Baik, mari kita buat semua class-class-nya.

Buka Netbeans, pada Porject yang kemarin, buatlah package baru bernama inheritance di dalam Source Packages.

Isi nama package dengan inheritance.

Berikutnya buatlah class-class baru berdasarkan diagram di atas.

File: inheritance/BangunDatar.java

package inheritance; public class BangunDatar { float luas(){ System.out.println("Menghitung laus bangun datar"); return 0; } float keliling(){ System.out.println("Menghitung keliling bangun datar"); return 0; } }

File: inheritance/Persegi.java

package inheritance; public class Persegi extends BangunDatar { float sisi; }

File: inheritance/Lingkaran.java

package inheritance; public class Lingkaran extends BangunDatar{ // jari-jari lingkaran float r; }

File: inheritance/PersegiPanjang.java

package inheritance; public class PersegiPanjang extends BangunDatar { float panjang; float lebar; }

File: inheritance/Segitiga.java

package inheritance; public class Segitiga extends BangunDatar { float alas; float tinggi; }

File: inheritance/Main.java

package inheritance; public class Main { public static void main(String[] args) { // membuat objek bangun datar BangunDatar bangunDatar = new BangunDatar(); // membuat objek persegi dan mengisi nilai properti Persegi persegi = new Persegi(); persegi.sisi = 2; // membuat objek Lingkaran dan mengisi nilai properti Lingkaran lingkaran = new Lingkaran(); lingkaran.r = 22; // membuat objek Persegi Panjang dan mengisi nilai properti PersegiPanjang persegiPanjang = new PersegiPanjang(); persegiPanjang.panjang = 8; persegiPanjang.lebar = 4; // membuat objek Segitiga dan mengisi nilai properti Segitiga mSegitiga = new Segitiga(); mSegitiga.alas = 12; mSegitiga.tinggi = 8; // memanggil method luas dan keliling bangunDatar.luas(); bangunDatar.keliling(); persegi.luas(); persegi.keliling(); lingkaran.luas(); lingkaran.keliling(); persegiPanjang.luas(); persegiPanjang.keliling(); mSegitiga.luas(); mSegitiga.keliling(); } }

Setelah itu, coba jalankan class Main, maka hasilnya:

Kenapa hasilnya bisa begitu?

Karena yang kita panggil sebenarnya adalah method luas() dan keliling() milik si induk (BangunDatar).

Objek anak dari BangunDatar belum memiliki method luas() dan keliling(), akhirnya mengambil milik induknya.

Lalu bagaimana kalau kita ingin membuat agar semua class anak memiliki method luas() dan keliling() yang berbeda dari induk?

Jawabanya: menggunakan method overriding.

Method Overriding

Method Overriding dilakukan saat kita ingin membuat ulang sebuah method pada sub-class atau class anak.

Method Overriding dapat dibuat dengan menambahkan anotasi @Override di atas nama method atau sebelum pembuatan method.

Contoh: Persegi.java

class Persegi extends BangunDatar { float sisi; @Override float luas(){ float luas = sisi * sisi; System.out.println("Luas Persegi: " + luas); return luas; } @Override float keliling(){ float keliling = 4 * sisi; System.out.println("Keliling Persegi: " + keliling); return keliling; } }

Artinya kita menulis ulang method luas() dan keliling() di class anak.

Sekarang mari kita buat method overriding untuk semua class anak.

File: Lingkaran.java

package inheritance; public class Lingkaran extends BangunDatar{ // jari-jari lingkaran float r; @Override float luas(){ float luas = (float) (Math.PI * r * r); System.out.println("Luas lingkaran: " + luas); return luas; } @Override float keliling(){ float keliling = (float) (2 * Math.PI * r); System.out.println("Keliling Lingkaran: " + keliling); return keliling; } }

Dalam rumus luas dan keliling lingkaran, kita bisa memanfaatkan konstanta Math.PI sebagai nilai PI. Konstanta ini sudah ada di Java.

File: PersegiPanjang.Java

package inheritance; public class PersegiPanjang extends BangunDatar { float panjang; float lebar; @Override float luas(){ float luas = panjang * lebar; System.out.println("Luas Persegi Panjang:" + luas); return luas; } @Override float keliling(){ float kll = 2*panjang + 2*lebar; System.out.println("Keliling Persegi Panjang: " + kll); return kll; } }

File: Segitiga.java

package inheritance; public class Segitiga extends BangunDatar { float alas; float tinggi; @Override float luas() { float luas = 1/2 * (alas * tinggi); System.out.println("Luas Segitiga: " + luas); return luas; } }

Untuk class Segitiga, kita hanya melakukan override terhadap method luas() saja. Karena untuk method keliling(), segitiga memiliki rumus yang berbeda-beda.

…atau mungkin bisa diturunkan lagi class segitiga ini menjadi: SegitigaSiku, SegitigaSamaKaki, SegitigaSamaSisi, dsb.

Sekarang mari kita coba eksekusi class Main lagi:

Tunggu dulu!

Tadi di awal katanya tidak efisien menulis berulang-ulang, lah ini?

Iya di awal kita menulis atribut dari Enemy yang sama berulang-ulang. Berbeda dengan yang ini, kita memang menulis method yang sama. Tapi isi atau rumus di dalam method-nya berbeda-beda.

Ini nanti akan kita bahas dalam Polymorfisme (banyak bentuk).

Akhir Kata…

Inheritance adalah salah satu pilar penting dalam OOP yang harus dipahami. Karena kita akan sering menggunakannya dalam pembuatan program.

Selanjutnya silahkan perlajari tentang hak akses member (modifier).

Atau kembali ke indeks tutorial Java

Video yang berhubungan

Postingan terbaru

LIHAT SEMUA