Abstract Class Vs Interface Java

4 min read Jun 22, 2024
Abstract Class Vs Interface Java

Abstract Class vs Interface di Java

Dalam pemrograman Java, terdapat dua konsep yang sering digunakan untuk mencapai abstraksi, yaitu abstract class dan interface. Kedua konsep ini memiliki kemiripan, namun memiliki perbedaan yang signifikan.

Abstract Class

Abstract Class adalah kelas yang tidak dapat diinstansiasi (tidak dapat dibuat objeknya). Abstract class dapat berisi method abstract (method yang hanya memiliki deklarasi tanpa implementasi) dan method konkrit (method yang memiliki implementasi).

Kegunaan Abstract Class:

  • Menyediakan template untuk kelas turunan: Abstract class mendefinisikan struktur dan perilaku dasar yang dapat digunakan oleh kelas turunan.
  • Mempromosikan reusability: Kelas turunan dapat mewarisi method dan variabel dari abstract class.
  • Membatasi instansiasi: Abstract class tidak dapat diinstansiasi, memaksa kelas turunan untuk mengimplementasikan method abstract.

Contoh Abstract Class:

abstract class Shape {
    int sides;

    abstract double calculateArea(); 

    void display() {
        System.out.println("Ini adalah bentuk geometri.");
    }
}

class Square extends Shape {
    int side;

    Square(int side) {
        this.side = side;
        this.sides = 4;
    }

    @Override
    double calculateArea() {
        return side * side;
    }
}

public class Main {
    public static void main(String[] args) {
        Square square = new Square(5);
        System.out.println("Luas persegi: " + square.calculateArea());
    }
}

Interface

Interface adalah tipe data yang mendefinisikan serangkaian method abstract tanpa implementasi. Interface tidak dapat diinstansiasi dan tidak memiliki variabel anggota (instance variable).

Kegunaan Interface:

  • Mendefinisikan kontrak: Interface mendefinisikan kontrak yang harus diimplementasikan oleh kelas yang mengimplementasikannya.
  • Mencapai polymorphism: Interface memungkinkan untuk menggunakan berbagai implementasi dari kelas yang berbeda dengan cara yang sama.
  • Multiple inheritance: Sebuah kelas dapat mengimplementasikan beberapa interface, memungkinkan kelas tersebut mewarisi perilaku dari berbagai sumber.

Contoh Interface:

interface Drawable {
    void draw();
}

class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Menggambar lingkaran.");
    }
}

class Rectangle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Menggambar persegi panjang.");
    }
}

public class Main {
    public static void main(String[] args) {
        Drawable circle = new Circle();
        Drawable rectangle = new Rectangle();
        circle.draw();
        rectangle.draw();
    }
}

Perbedaan Utama:

Fitur Abstract Class Interface
Instansiasi Tidak dapat diinstansiasi Tidak dapat diinstansiasi
Method Dapat berisi method abstract dan konkrit Hanya berisi method abstract
Variabel anggota Dapat memiliki variabel anggota Tidak memiliki variabel anggota
Pewarisan Diwariskan menggunakan keyword extends Diimplementasikan menggunakan keyword implements
Multiple Inheritance Tidak mendukung multiple inheritance Mendukung multiple inheritance
Konstruktor Dapat memiliki konstruktor Tidak dapat memiliki konstruktor

Kapan Menggunakan Abstract Class vs Interface:

  • Gunakan abstract class jika Anda ingin memberikan template dasar dan beberapa implementasi untuk kelas turunan.
  • Gunakan interface jika Anda ingin mendefinisikan kontrak untuk kelas yang berbeda dan mencapai polymorphism.

Pilihlah abstract class atau interface berdasarkan kebutuhan dan tujuan desain Anda.

Latest Posts