Kelas Abstrak Vs. Antarmuka di Jawa: Penjelasan dengan Contoh

Kelas dan antarmuka abstrak digunakan untuk abstraksi di Java. Abstraksi dalam pemrograman berorientasi objek mengacu pada penyembunyian detail implementasi dari pengguna akhir.

Dalam abstraksi, Anda dapat mengetahui apa saja fungsionalitasnya, tetapi Anda tidak dapat mengetahui bagaimana penerapannya.

Mari kita lihat masing-masing dan mencoba memahami mengapa mereka digunakan.

Kelas Abstrak

Kelas yang tidak dapat diinisiasi sebagai objek dan mungkin memiliki atau tidak memiliki metode abstrak di dalamnya disebut kelas abstrak di Java. Metode abstrak adalah metode yang tidak memiliki badan implementasi saat dideklarasikan.

Contoh kelas abstrak GraphicObject – Oracle

Anda dapat membuat kelas abstrak dengan menentukan kata kunci abstrak sebelum kata kunci kelas.

abstract class abstractClass {
    void run() {
        System.out.println("ran");
    }
}

Kelas abstrak dapat diperluas oleh kelas lain. Dengan kata lain, itu bisa disubklasifikasikan juga.

abstract class AbstractClass {
    void run() {
        System.out.println("ran");
    }
}

class ExtendingAbstractClass extends AbstractClass {
    void newMethod() {
        System.out.println("new");
    }

    @Override
    void run() {
        System.out.println("override");
    }
}

Kelas abstrak digunakan untuk mengimplementasikan metode umum di antara banyak kelas yang memperluas kelas abstrak yang diberikan. Selain itu, kemampuan untuk mendefinisikan metode abstrak di dalam kelas abstrak membuatnya sangat berguna untuk kelas yang memiliki metode serupa tetapi dengan implementasi yang berbeda. Mari kita ambil contoh.

  Cara Menghapus Rekaman Alexa Anda dengan Suara

Pertimbangkan mobil yang memiliki beberapa fungsi, seperti mulai, berhenti, mundur, dll. Fungsi ini umum di antara semua jenis mobil.

Tapi bagaimana dengan fungsi otomasi seperti self-driving? Penerapan fungsi tersebut dapat berbeda untuk berbagai jenis mobil. Mari kita lihat bagaimana Anda bisa membuat program berorientasi objek yang terkait dengannya.

Pertama-tama, buat kelas Mobil yang akan diperluas oleh beberapa kelas dari jenis mobil yang berbeda.

abstract class Car {
    void start() {
        // implementation
        System.out.println("runs car");
    }

    void stop() {
        // implementation
        System.out.println("engine stops");
    }

    void reverse() {
        // implementation
        System.out.println("reverse mode enabled");
    }

    abstract void selfDrive();
}

Metode start(), stop(), dan reverse() adalah metode yang umum di semua mobil. Jadi implementasinya sudah ditentukan di dalam kelas Mobil itu sendiri. Namun, jenis mobil tertentu dapat memiliki implementasi mode self-driving yang berbeda. Dan dengan demikian, Anda dapat mendefinisikan selfDrive() sebagai metode abstrak dan mengimplementasikannya dengan cara yang berbeda di kelas yang berbeda dari jenis mobil yang berbeda.

class CarTypeA extends Car {
    @Override
    void start() {
        super.start();
    }

    @Override
    void stop() {
        super.stop();
    }

    @Override
    void reverse() {
        super.reverse();
    }

    void selfDrive() {
        // custom implementation
        System.out.println("Type A self driving mode enabled");
    }
}
class CarTypeB extends Car {
    // ...all similar methods

    void selfDrive() {
        // custom implementation
        // different implementation than CarTypeB
        System.out.println("Type B self driving mode enabled");
    }
}

Penting untuk dicatat bahwa, jika subkelas tidak mengimplementasikan semua metode abstrak yang didefinisikan dalam kelas abstrak, maka subkelas tersebut harus dideklarasikan sebagai kelas abstrak itu sendiri.

  Hitung Risiko Penyakit Jantung Anda Dengan KnowYour4

Antarmuka

Antarmuka adalah cara untuk memberi tahu kelas metode apa yang harus diterapkan olehnya. Misalnya, jika Anda mempertimbangkan contoh sebuah mobil, ia memiliki beberapa fungsi dasar. Itu bisa mulai, bergerak dan berhenti. Fungsi-fungsi ini umum di semua mobil.

Jadi, jika Anda mengimplementasikan antarmuka mobil di kelas, Anda harus mengimplementasikan semua metode agar mobil berfungsi dengan baik dan aman.

Mirip dengan kelas abstrak, kita tidak dapat membuat instance atau membuat objek dari sebuah antarmuka. Ini dapat dianggap sebagai kelas abstrak sepenuhnya karena hanya berisi metode abstrak yaitu metode tanpa badan implementasi.

Anda dapat membuat antarmuka dengan menggunakan kata kunci antarmuka.

interface CAR {
    void start();
    void stop();
    void move();
}

Menerapkan antarmuka dengan menggunakan kata kunci implements saat mendefinisikan kelas.

class CarTypeB implements CAR {
    public void start() {
        System.out.println("started");
    }

    public void stop() {
        System.out.println("stopped");
    }

    public void move() {
        System.out.println("running");
    }
}

Kesamaan

Tidak ada instantiasi sebagai objek adalah satu hal yang dimiliki oleh kelas abstrak dan antarmuka.

Perbedaan

Kelas AbstrakAntarmukaPewarisan & ImplementasiHanya satu kelas abstrak yang dapat diwariskan oleh sebuah kelas. Beberapa antarmuka dapat diimplementasikan oleh sebuah kelas. Jenis VariabelItu dapat memiliki variabel final, non-final, statis, dan non-statis. Itu hanya dapat memiliki variabel statis dan final. Jenis MetodeIni dapat berisi metode abstrak maupun non-abstrak.Ini hanya dapat berisi metode abstrak, tetapi metode statis adalah pengecualian.Pengubah AksesKelas abstrak dapat memiliki pengubah akses.Tanda tangan metode yang didefinisikan dalam antarmuka bersifat publik secara default. Antarmuka tidak memiliki pengubah akses.Konstruktor & PenghancurHal ini dapat mendeklarasikan konstruktor dan destruktor.Tidak dapat mendeklarasikan konstruktor atau destruktor.SpeedFastSlowPerbedaan antara kelas abstrak & antarmuka

  Cara Mendapatkan Peringatan Pelanggaran Data dari Monitor Firefox Mozilla

Kapan menggunakan kelas dan antarmuka abstrak?

Gunakan kelas abstrak saat:

  • Anda ingin berbagi beberapa metode dan bidang umum di antara banyak kelas.
  • Mendeklarasikan bidang non-statis dan non-final untuk mengubah keadaan objek yang terikat.

Anda dapat menggunakan antarmuka saat:

  • Anda ingin mendefinisikan perilaku kelas yang mengimplementasikan antarmuka, tetapi Anda tidak peduli dengan cara penerapannya.
  • Anda ingin memastikan bahwa kelas mengimplementasikan semua metode agar berfungsi dengan baik.

Kata Akhir

Antarmuka terutama digunakan untuk membuat API karena mereka dapat menyediakan struktur untuk mengimplementasikan fungsionalitas tanpa mengkhawatirkan implementasi yang sebenarnya.

Kelas abstrak umumnya digunakan untuk berbagi metode umum abstrak dan non-abstrak di antara banyak kelas, yang memperluas kelas abstrak untuk membuat kode lebih dapat digunakan kembali.

Pelajari lebih lanjut tentang Java dengan bantuan kursus online untuk java ini. Apakah Anda sedang mempersiapkan wawancara di Jawa? Berikut adalah beberapa pertanyaan wawancara tentang Pemrograman Berorientasi Objek.