Abstract Class, Concrete Class, dan Interface

PBO 2017, Teknik Informatika UTM
Abstract Class, Concrete Class, dan Interface

Abstract Class
Abstract Class adalah sebuah class yang tidak bisa di-instansiasi (tidak bisa dibuat menjadi objek) dan berperan sebagai ‘kerangka dasar’ bagi class turunannya. Di dalam abstract class umumnya akan memiliki abstract method.
Abstract Method adalah sebuah ‘method dasar’ yang harus diimplementasikan ulang di dalam class anak (child class). 

Abstract class digunakan di dalam inheritance (pewarisan class) untuk ‘memaksakan’ implementasi method yang sama bagi seluruh class yang diturunkan dari abstract class. Abstract class digunakan untuk membuat struktur logika penurunan di dalam pemrograman objek.
Contoh Abstract Class : 
- Abstract Class untuk Tumbuhan
package javaapplication4;

public abstract class Tumbuhan {
    public abstract void BerkembangBiak();
}

- Abstract Class untuk Dikotil
package javaapplication4;

public abstract class Dikotil extends Tumbuhan {
    public void Akar(){
        System.out.println("Akar Tunggang");
    }
    public void Batang(){
        System.out.println("Batang bercabang");
    }
}

- Abstract Class untuk Monokotil
package javaapplication4;

public abstract class Monokotil extends Tumbuhan{
    public void Akar(){
        System.out.println("Akar Serabut");
    }
    public void Batang(){
        System.out.println("Batang tidak bercabang");
    }
}

Concrete Class
Concrete Class mendefinisikan class yang nyata dan dapat membentuk atau instansiasi object. Object hanya bisa dibuat dari non-abstract class (concrete class).
Concrete Class dapat menurunkan implementasi dari super class dan dapat sebagai base class pada hierarchical relationship dan membutuhkan class lain untuk mewarisinya.

Contoh Concrete Class : 
- Concrete Class untuk Durian
package javaapplication4;
public class Durian extends Dikotil implements Buahbuahan {

    public void BerkembangBiak() {
        System.out.println("Vegetatif (Okulasi atau Cangkok) dan Generatif");
    }

    public void warnaBuah() {
        System.out.println("Kuning atau Hijau"); 
    }
    

}

Concrete Class untuk Mangga
package javaapplication4;
public class Mangga extends Dikotil implements Buahbuahan{

    public void BerkembangBiak() {
        System.out.println("Vegetatif buatan (Cangkok) dan Generatif");
    }

    public void warnaBuah() {
        System.out.println("Kuning atau Hijau atau Orange");
    }
    

}

Concrete Class untuk Terong
package javaapplication4;

public class Terong extends Dikotil {
    public void BerkembangBiak() {
        System.out.println("Vegetatif dan Generatif");
    }

    public void warnaBuah() {
        System.out.println("Ungu atau Hijau");
    }

}

Concrete Class untuk Pisang
package javaapplication4;

public class Pisang extends Monokotil implements Buahbuahan{
    public void BerkembangBiak() {
        System.out.println("Vegetatif (Tunas)");
    }

    public void warnaBuah() {
        System.out.println("Kuning atau Hijau");
    }

}

Concrete Class untuk Bawang Merah
package javaapplication4;

public class Bawangmerah extends Monokotil{
    public void BerkembangBiak() {
        System.out.println("Vegetatif alami (Umbi Lapis)");
    }

    public void warnaBuah() {
        System.out.println("Ungu");
    }

}

Concrete Class untuk Nanas
package javaapplication4;

public class Nanas extends Monokotil implements Buahbuahan{
    public void BerkembangBiak() {
        System.out.println("Vegetatif (Tunas)");
    }

    public void warnaBuah() {
        System.out.println("Kuning atau Hijau");
    }

}

Concrete Class untuk Bunga Matahari
package javaapplication4;

public class Bungamatahari extends Monokotil {
        public void BerkembangBiak() {
        System.out.println("Generatif");
    }

    public void warnaBuah() {
        System.out.println("Kuning");
    }

}

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).

Contoh Interface :

package javaapplication4;


public interface Buahbuahan {
    public abstract void warnaBuah();
}


Untuk Main Programnya : 
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication4;

/**
 *
 * @author SYSTEM
 */
public class Maintumbuhan {
    public static void main(String[] args){
        
        Dikotil durian=new Durian();
        System.out.println("Durian");
        durian.BerkembangBiak();
        durian.Akar();
        durian.Batang();
        
        Dikotil mangga=new Mangga();
        System.out.println("Mangga");
        mangga.BerkembangBiak();
        mangga.Akar();
        mangga.Batang();
        
        Dikotil terong=new Terong();
        System.out.println("Terong");
        terong.BerkembangBiak();
        terong.Akar();
        terong.Batang();
       
        Monokotil pisang=new Pisang();
        System.out.println("Pisang");
        pisang.BerkembangBiak();
        pisang.Akar();
        pisang.Batang();
        
        Monokotil bawang =new Bawangmerah();
        System.out.println("Bawang Merah");
        bawang.BerkembangBiak();
        bawang.Akar();
        bawang.Batang();
        
        Monokotil nanas=new Nanas();
        System.out.println("Nanas");
        nanas.BerkembangBiak();
        nanas.Akar();
        nanas.Batang();
        
        Monokotil bmatahari=new Bungamatahari();
        System.out.println("Bunga Matahari");
        bmatahari.BerkembangBiak();
        bmatahari.Akar();
        bmatahari.Batang();
        
    }
}

Kapan kita harus menggunakan Abstract Class, Concrete Class, dan Interface ?

- Untuk Abstract Class digunakan ketika programer memerlukan sebuah objek nyata di mana perilaku dan sifat disetiap objek tersebut berbeda, dan  dikelompokkan ke dalam satu class.
- Untuk Concrete Class digunakan ketika programer memerlukan sebuah objek nyata yang merupakan turunan dari abstract class.
- Untuk Interface pada umumnya subclass hanya bisa memiliki satu superclass, dengan menggunakan interface programmer bisa membuat superclass lebih dari satu untuk membuat kelompok class yang baru



Komentar