ABSTRACT CLASS, CONCRETE CLASS DAN INTERFACE

TUGAS PEMROGRAMAN BERORENTIASI OBJEK (PBO 2017)
TENIK INFORMATIKA
UNIVERSITAS TRUNOJOYO MADURA

A. Abstract Class

Abstract class adalah kelas yang memiliki setidaknya satu abstract method. Abstract method adalah method yang tidak memiliki body atau hanya deklarasi nama method. Abstract class digunakan ketika method subclass memiliki method yang sama dengan superclass atau disebut overidding. Kegunaan method adalah
1. Class Abstract berisi beberapa method dan beberapa method abstract. Class Abstract berisi sebagian implementasi, dan subclass yang melengkapi implementasinya. Dengan kata lain Class Abstract memiliki beberapa kesamaan (Bagian yang diimplementasikan oleh subclass) dan memiliki perbedaan (method yang dimiliki sendiri oleh class abstract)
2. Deklarasikan method abstract, jika ada satu atau lebih subclass yang diharapkan mempunyai fungsionalitas yang sama tampil implementasi berbeda.
3. Gunakan class abstract untuk mendefinisikan behavior secara umum sebagai superclass, sedangkan subclass menyediakan implementasi detail. 
4. Jika class abstract semua method merupakan method abstract, sebaiknya class abstract tersebut diganti menjadi Interface[http://yuliana.lecturer.pens.ac.id/OOP/Kelas%20Lanjut%202/T%20-%20Class%20Abstract%20dan%20Interface.pdf]



B. Concrete Class
Concrete class adalah kelas yang tidak berisi abstract method atau berisi class yang nayata. Concrete class digunakan ketika sebuah tidak memiliki abstract method. Concrete class dapat menurunkan implementasi method pada superclass. Concrete class dapat membentu atau menginstasiasi objek.
C. Interface
Interface adalah wadah dari kumpulan method yang bersifat abstrak atau tidak memiliki implementasi. Sedangkan method yang didefinisikan di dalam interface tersebut akan diimplementasikan oleh class yang mengimplementasikan interface tersebut. Interface merupakan bentuk perluasan dari kelas abstrak.
Selain method, interface juga dapat berisi sekumpulan variable, namun variable yang dideklarasikan di dalam interface harus bersifat final (nilainya tidak dapat diubah /konstan). 

Listing Program

package TugasAbstractConcrete;

//Inheritance Tumbuhan
abstract class Tumbuhan  {
abstract void memasak();
void bernafas() { System.out.println("Tumbuhan membutuhkan oksigen untuk bernafas"); }
}

class Dikotil extends Tumbuhan {
void memasak() { System.out.println("Tumbuhan Dikotil memasak makanan dengan fotosintesis");}
void jenis(){System.out.println("Tumbuhan berjenis Dikotil");}
void biji(){System.out.println("Bijinya berkeping 2");}
void akar(){System.out.println("Akarnya berupa tunggang");}
void daun(){System.out.println("Memiliki daun ganda");}
void batang(){System.out.println("Memiliki batang yang  bercabang");}
}
class Monokotil extends Tumbuhan{
void memasak() {System.out.println("Tumbuhan Monokotil memasak makanan dengan fotosintesis");}
void jenis() {System.out.println("Tumbuhan berjenis Monokotil");}
void biji() {System.out.println("Bijinya berkeping 1");}
void akar() {System.out.println("Akarnya berupa serabut");}
void daun() {System.out.println("Memiliki daun tunggal");}
void batang() {System.out.println("Memiliki batang yang tidak bercabang");}
}

class Mawar extends Dikotil {
void duri(){System.out.println("Bunga mawar beduri tajam");}
}

//interface untuk tumbuhan pemakan hewan
interface PemakanHewan {
void memakanHewan();}

class BungaBangkai extends Monokotil implements PemakanHewan{
public void memakanHewan() {System.out.println("Bunga bangkai menjebak serangga untuk dimakan");}
}

//Inheritance Hewan memiliki interface memakan hewan
abstract class Hewan {
abstract void memakanHewan();}

class karnivora extends Hewan implements PemakanHewan{
public void memakanHewan() {System.out.println("Hewan karnivora memakan hewan lain");}
}

public class Program {

public static void main(String[] args) {
// TODO Auto-generated method stub
Mawar mawar = new Mawar();
BungaBangkai bangkai = new BungaBangkai();
Karnivora hewanBuas = new Karnivora();
System.out.println("Class Mawar mewarisi subclass Dikotil yang mewarisi superclass Tumbuhan");
mawar.bernafas();
System.out.println("");
System.out.println("Class Mawar mewarisi subclass Dikotil");
mawar.akar();
mawar.batang();
mawar.biji();
mawar.daun();
System.out.println("");
System.out.println("Method overriding dari class dikotil untuk method abstract class Tumbuhan");
mawar.memasak();
System.out.println("");
System.out.println("Class Mawar dengan methodnya sendiri");
mawar.duri();
System.out.println("");
System.out.println("Class bunga bangkai mewarisi subclass Monokotil yang mewarisi superclass Tumbuhan");
bangkai.bernafas();
System.out.println("");
System.out.println("Class bunga bangkai mewarisi subclass Monokotil");
bangkai.akar();
bangkai.batang();
bangkai.biji();
bangkai.daun();
System.out.println("");
System.out.println("Method overriding dari class dikotil untuk method abstract class Tumbuhan");
bangkai.memasak();
System.out.println("");
System.out.println("Class bunga bangkai mewarisi method dari interface PemakanHewan");
bangkai.memakanHewan();
System.out.println("");
System.out.println("Class Karnivora mewarisi method dari interface PemakanHewan");
hewanBuas.memakanHewan();
System.out.println("");
}

}


Penjelasan


1. Class Tumbuhan merupakan abstract class karena memiliki abstract method yaitu bernafas.
2. Class Dikotil merupakan concrete class karena tidak memiliki abstract method. Method pada class Dikotil terdiri dari memasak sebagai implementasi dari abstract method milik superclass Tumbuhan, method biji, akar dan batang.
3. Class Monokotil merupakan concrete class karena tidak memiliki abstract method. Method pada class Monokotil terdiri dari memasak sebagai implementasi dari abstract method milik superclass Tumbuhan, method biji, akar dan batang.
4. Class Mawar merupakan concrete class karena tidak memiliki abstract method. Method pada class Mawar terdiri dari duri dan warisan method dari superclass Tumbuhan dan subclass Dikotil
5. Class BungaBangkai merupakan concrete class karena tidak memiliki abstract method. Method pada class BungaBangkai terdiri dari memakanHewan dan warisan method dari superclass Tumbuhan dan subclass Monokotil. Class BungkaBangkai mengimplementasikan interface PemakanHewan.
6. Class Karnivora merupakan concrete class karena tidak memiliki abstract method. Method pada class Karnivora terdiri memakanHewan yang merupakan implementasi dari Interface Pemakan Hewan.
Interface PemakanHewan merupakan wadah dari method memakanHewan yang akan diimplementasikan oleh subclass BungaBangkai dan subclass Karnivora




Hasil Program
Class Mawar mewarisi subclass Dikotil yang mewarisi superclass Tumbuhan
Tumbuhan membutuhkan oksigen untuk bernafas

Class Mawar mewarisi subclass Dikotil
Akarnya berupa tunggang
Memiliki batang yang  bercabang
Bijinya berkeping 2
Memiliki daun ganda

Method overriding dari class dikotil untuk method abstract class Tumbuhan
Tumbuhan Dikotil memasak makanan dengan fotosintesis

Class Mawar dengan methodnya sendiri
Bunga mawar beduri tajam

Class bunga bangkai mewarisi subclass Monokotil yang mewarisi superclass Tumbuhan
Tumbuhan membutuhkan oksigen untuk bernafas

Class bunga bangkai mewarisi subclass Monokotil
Akarnya berupa serabut
Memiliki batang yang tidak bercabang
Bijinya berkeping 1
Memiliki daun tunggal

Method overriding dari class dikotil untuk method abstract class Tumbuhan
Tumbuhan Monokotil memasak makanan dengan fotosintesis

Class bunga bangkai mewarisi method dari interface PemakanHewan
Bunga bangkai menjebak serangga untuk dimakan

Class Karnivora mewarisi method dari interface PemakanHewan
Hewan karnivora memakan hewan lain

Bentuk Visual Inheritance

Komentar

Posting Komentar