INHERITANCE dan POLYMORPHISM dalam Java 1. INHERITANCE Perngertian dari inheritance adalah dimana sebuah objek dapat mempunyai objek turunan. Dalam hal pemrogramman makan dapat diimpelementasikan dengan sebuahclass yang mempunyai class turunan. Class yang mempunyai class turunan disebut sebagai Parent Class atau Base Class, sedangkan class yang menjadi turunan dari Parent Class disebut sebagai Subclass atau Child Class. Secara sederhana misal Hewan adalah parent class maka child class bisa berupa ayam,kucing,bebek dll. a. Dekalarasi Inheritance Cara untuk mendeklarasikan inheritance adalah dengan memberikan keyword extendssetelah nama class diikuti denga nama parent class.Kata kunci extends memberikan informasi pada kompiler Java bahwa kita ingin melakukan perluasan class. b. Konsep Inheritance dalam Java Konsep inheritane yang ada di Java adalah hanya memperkenankan adanya Single inheritance.Konsep Single inheritane artinya bahwa sebuah subclass hanya diperkenankan memiliki satu parent class. Konsep inheritance yang ada di java memperkenankan adanya multilevel inheritance. Konsep multilevel inheritance berarti bahwa sebuah subclass dapat memiliki subclass lagi sebagai turunannya. Subclass menggunakan keyword super untuk mereferensi data dan fungsi dari parent class-nya. Dengan kata lain keyword super ini berfungsi sebagai alias dari Parent class.Format penulisan dari keyword ini : Ø super.data_member -> merujuk pada data member dari parent class Ø super.function_member() -> merujuk pada function member dari parent class Ø super() -> merujuk pada konstruktor dari parent class c. Keuntungan dari inheritance Ø Bersifat reusable. Bayangkan bila anda perlu membuat beberapa class yang mempunyai sifat dasar dan basis class yang sama, dan pada masing masing class tersebut ditambahkan data dan method yang unique. Tanpa inheritance anda harus menyalin semua data dan method dari suatu class. Hal tersebut mungkin masih bisa dilakukan jika basis class anda definisikan sendiri. Ø Kemudahan dalam me-manage kelas yang memiliki data dan method yang sama. Jika anda ingin melakukan modifikasi suatu data atau method pada semua sub class anda tidak perlu melakukan perubahan pada masing masing sub class. Modifikasi cukup dilakukan pada super class. Ø Dalam inheritance dikenal dengan istilah overriding. Overidding adalah kemampuan sub class untuk melakukan modifikasi data dan method dari super class. Sebelum anda melakukan overidding terhadap method atau data dari class induk, anda harus memperhatikan aksesibelitas dari data dan method dari super class.[ overidding hanya bisa dilakukan untuk data dan method yang memiliki modifier default, public dan protected. Contoh Program: import java.util.Scanner; class ling{ Scanner in = new Scanner(System.in); int r = in.nextInt(); } class ling1 extends ling{ double jari1; } class luas1 extends ling1{ public void Luas(){ jari1 = super.r; double luas = 3.14*jari1*jari1; System.out.format("Luas Lingkaran 1 = %.2f", luas); } } class keliling1 extends ling1{ public void Keliling(){ jari1 = super.r; double keliling = 3.14*2*jari1; System.out.format("Keliling Lingkaran 1 = %.2f", keliling); } } class ling2 extends ling{ double jari2; } class luas2 extends ling2{ public void Luas(){ jari2 = super.r; double luas = 3.14*jari2*jari2; System.out.format("Luas Lingkaran 2 = %.2f", luas); } } class keliling2 extends ling2{ public void Keliling(){ jari2 = super.r; double keliling = 3.14*2*jari2; System.out.format("Keliling Lingkaran 2 = %.2f", keliling); } } public class lingkar{ public static void main ( String[]args ) { System.out.println("Masukkan jari-jari lingkaran"); luas1 a=new luas1(); keliling1 b=new keliling1(); luas2 c=new luas2(); keliling2 d=new keliling2(); a.Luas(); System.out.println(); b.Keliling(); System.out.println(); c.Luas(); System.out.println(); d.Keliling(); } } output program : 2. POLYMORPHISM Polymorphism berarti “mempunyai banyak bentuk” juga merupakan salah satu sifat class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki aksi yang berbeda. Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat berperilaku seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku seperti class dasar, dan jika ia menunjuk class turunan ia akan berperilaku seperti class turunan. Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana. Dalam hal ini suatu objek atau class dan perubahan perilakunya adalah dari kelas dasar ke kelas turunan, tidak bisa objek kelas turunan menunjuk ke kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program dijalankan (run-time), ikatan yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan dinamis hanya akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtual (maya) Pada dasarnya ada 2 tipe polymorphism, yaitu: a. Static atau trivial merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi dgn argumen yang berbeda) yang terbagi dalam 3 signature yaitu: - Jenis Array - Letak Array - Type Array Contoh function overloading : - void tambah (int a, int b); - void tambah(float d, float c); b. Dynamic atau true Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan virtual method. Contoh Program: /*disimpan nama Hewan.java*/ class Hewan { String nama, jenis, bersuara; Hewan(String nama, String jenis, String bersuara){ //sintaks menampilkan nama this.nama=nama; this.jenis=jenis; this.bersuara=bersuara; } public String toString(){ return "Ini adalah "+jenis+"\nNamanya "+nama+"\n"+bersuara; } public void bersuara(){ } } /*disimpan nama Polimorfisme.java*/ import java.util.*; class Polimorfisme{ public static void main(String args[]){ Hewan[] hewannya = { new Anjing("Broni", "Herder", "Hug Hug Hug......"), new Kucing("Kiti", "Persia", "Meong.. Meong... "), new Ayam("Toki", "Buras", "kuk kruyu. ") }; Hewan pilihHewan; Random pilih = new Random(); for (int i = 0; i<5 ; i++){ pilihHewan = hewannya[pilih.nextInt(hewannya.length)]; System.out.println("\nPilihan Anda:\n" + pilihHewan); } } } /*disimpan nama Ayam.java*/ class Ayam extends Hewan{ private String nama,jenis,bersuara; Ayam(String nama, String jenis, String bersuara){ //sintaks menampilkan nama super(nama, jenis, bersuara); } public void ShowAyam(){ System.out.println("Nama Ayam : "+nama); System.out.println("Jenis Ayam : "+jenis); //sintaks menampilkan nama dan jenis hewan } public void bersuara(){ //sintaks menampilkan suara hewan System.out.println("kuk kruyu. "); } } /*disimpan nama Kucing.java*/ class Kucing extends Hewan { private String nama,jenis,bersuara; Kucing(String nama, String jenis, String bersuara){ //sintaks menampilkan nama super(nama, jenis, bersuara); } public void ShowKucing(){ System.out.println("Nama Kucig : "+nama); System.out.println("Jenis Kucing : "+jenis); //sintaks menampilkan nama dan jenis hewan } public void bersuara(){ //sintaks menampilkan suara hewan System.out.println("Meong.. Meong... "); } } /*disimpan nama Anjing.java*/ class Anjing extends Hewan{ private String nama,jenis,bersuara; Anjing(String nama, String jenis, String bersuara){ //sintaks menampilkan nama super(nama, jenis, bersuara); } public void ShowAnjing(){ System.out.println("Nama Anjing : "+nama); System.out.println("Jenis Anjing : "+jenis); //sintaks menampilkan nama dan jenis hewan } public void bersuara(){ //sintaks menampilkan suara hewan System.out.println("Hug Hug Hug...... "); } }