Belajar Mengenal Abstract Class di Java


Di postingan sebelumnya yaitu mengenai Interface kita sudah menyinggung sedikit mengenai Abstract Class yaitu tentang perbedaannya dengan Interface.Kalau secara pengertian Abstract Class yaitu class yang dideklarasikan menggunakan keyword abstract didepannya.Abstract Class bisa memiliki method abstract (method tanpa body) dan method concrete (method biasa).Class ini perlu diextends dan methodnya diimplementasikan karena kita tidak bisa menginstansiasikan class ini

Abstract Class dan Interface merupakan cara untuk melakukan abstraksi di java.Abstraksi merupakan proses menyembunyikan detail implementasi dan hanya menampilkan fungsinya saja kepada user.Mudahnya,itu hanya menampilkan hal penting kepada user dan menyembunyikan detail di dalamnya.Contohnya, saat kita melakukan SMS kita tidak tahu bagaimana proses SMS tersebut dikirim yang kita tahu apakah SMS tersebut sudah terkirim atau belum

Poin Penting Abstract Class :


  • Abstract Class dideklarasikan dengan keyword abstract
  • Bisa memiliki abstract dan concrete method
  • Tidak bisa diinstansiasikan
  • Memiliki constructor dan method static juga
  • Bisa memiliki final method yang membuat subclass tidak bisa mengubah body nya
Membuat Abstract Class

abstract class A {}
Membuat Abstract Method

Tidak seperti di Interface yang method didalamnya otomatis menjadi abstract method.Di class abstract,kita perlu menuliskan abstract di depannya untuk menjadikannya abstract method

abstract void cetak();//tidak punya body
Contoh Penggunaan Abstract Class
abstract class java
penggunaan class abstract

Kita membuat abstract class Motor dengan method abstract run() dan method concrete stop().Lalu kita buat class Honda untuk extends ke abstract class Motor lalu kita implementasikan method run() di sana

Dalam main method,kita upcast obyek class Honda ke abstract class Motor (di java = artinya menyimpan ke bagian sebelah kiri sama seperti int a = 6 artinya kita menyimpan 6 ke variabel a) lalu kita panggil method run() dan stop() untuk menghasilkan output di atas








Mengenal Interface di Java


Interface artinya tampilan secara bahasa.Kalau di dalam java,Interface merupakan kumpulan method yang hanya berisi method abstrak (method yang hanya ada deklarasi dan struktur methodnya saja tanpa ada detail implementasi dari method tersebut).Di Interface juga tidak ada konstruktor sehingga tidak memungkinkan untuk membuat obyek (instansiasi) dari Interface

Karena tidak punya konstruktor,otomatis variable dari Interface hanya bisa memiliki modifier static dan final . static merupakan suatu modifier untuk membuat class member menjadi properti dari class itu sendiri bukan dari obyek class nya.final merupakan modifier untuk membuat suatu variabel tidak bisa diubah nilainya,suatu method tidak bisa dioverride dan suatu class tidak bisa diextends

Untuk membuat implementasi dari method di dalam Interface, suatu class bisa mengimplementasi Interface tersebut dengan menggunakan keyword implements.Dari class yang implements ke suatu Interface wajib mengimplementasikan semua method yang ada di dalam Interface

Interface sendiri digunakan untuk mengatasi kekurangan java yaitu satu class hanya bisa mewarisi (extends) dari satu superclass saja sebaliknya pada Interface,suatu class bisa implements ke banyak Interface sekaligus

Poin penting Interface :


  • Hanya bisa berisi method abstrak
  • Tidak memiliki konstruktor sehingga tidak mungkin bisa diinstansiasi
  • Class hanya bisa implements saja ke Interface sedangkan extends tidak bisa
  • Interface hanya bisa extends ke Interface lain
  • Interface mendukung multiple Inheritance (satu class bisa implements lebih dari satu Interface)
  • hanya bisa memiliki static dan final variable
  • hanya bisa memiliki public method 

Note : Mulai java 8 kita bisa memiliki body pada method Interface dengan menuliskan default pada method yang dikehendaki
Mulai java 8 kita bisa memiliki static method di dalam Interface

Perbedaan extends dan implements :

extends itu adalah untuk mewarisi artinya semua variabel dan method dari superclass bisa digunakan oleh subclass walaupun kalau membuat obyeknya dari subclass tersebut supaya nggak bingung kalian bisa lihat contoh di bawah



Lihat kan saya membuat obyeknya dari class waris yang merupakan subclass dari class contoh tapi saya bisa mendapatkan nilai variabel tinggi,nama, dan usia dari class Contoh.Seperti itulah extends

Sementara implements hanya untuk mengimplementasikan method dari Interface otomatis kita tidak mengakses variabel dari Interface tersebut menggunakan obyek dari class yang implements tadi


Hubungan Class dengan Interface :

Gambar ini bisa dengan mudah menggambarkan hubungan class dengan interface


Contoh kode Penggunaan Interface



class cara implements ke Interface selamat otomatis class cara harus mengimplementasikan method pagi(),siang(),dan malam(). Untuk mengujinya,kita bisa melalui main method dengan membuat obyek dari class cara (c) dan memakai semua method dari class cara maka didapatkanlah output 



Perbedaan Dengan Kelas Abstrak

Class Abstrak sekilas sama dengan Interface yaitu sama-sama tidak bisa diinstansiasikan dan sama-sama bisa di implementasikan method nya.Namun ternyata ada beberapa perbedaan yaitu sebagai berikut :


Interface
Abstrak Class
Menggunakan implements
Menggunakan extends
Hanya bisa memiliki abstract method
Bisa memiliki method abstract dan konkrit
Interface tidak dapat mengimplementasikan Abstrak Class
Abstrak Class dapat mengimplementasikan Interface
Mendukung Multiple Inheritance
Tidak mendukung Multiple Inheritance
Hanya dapat memiliki static final variable
Dapat memiliki final non final static dan non static variable
Tidak dapat memiliki constructor dan main method
Dapat memiliki constructor dan main method


Mungkin itu saja postingannya untuk interface semoga bisa bermanfaat amiin...





Mengenal Enum di Java dan Pengoperasiannya


Enum merupakan tipe data yang berisi  konstanta (tidak bisa diubah).Contoh penggunaan enum adalah untuk hari dalam seminggu (MINGGU, SENIN,SELASA,RABU,dll),musim (WINTER,FALL,SPRING,SUMMER).

Untuk membuat enum sendiri kita bisa memakai keyword enum dan semua elemen nya dituliskan dengan huruf kapital.Contoh pembuatan enum :

Enum digunakan untuk menciptakan tipe data sendiri seperti class.Untuk enum sendiri,kita bisa membuat enum di dalam ataupun di luar class

Enum di java sudah mewarisi class Enum,jadi itu tidak bisa mewarisi class lain,tapi itu bisa mengimplementasi interface.Kita juga bisa membuat field,constructor,method dan main method di dalam enum

Mengakses Konstanta Enum

Kita bisa menggunakan syntax NamaEnum.NamaKonstanta untuk mengakses konstanta enum.Seperti ini contohnya


Mencari Indeks Konstanta Enum

Kita bisa memakai format berikut untuk mencari indeks dari konstanta yang kita inginkan

NamaEnum.valueOf(NamaKonstanta).ordinal(); 


Menggunakan Enum di dalam Statement Switch

Kita bisa menggunakan enum di dalam switch case untuk memberikan aksi berbeda terhadap berbagai konstanta di dalam enum

Contoh penggunaan enum di dalam switch case

Perbedaan Enum Dengan Class

  • Enum tidak bisa dibuat obyek karena constructor dari enum bersifat private,sedangkan class bisa dibuat obyek
  • Enum tidak bisa mewarisi class lain tapi bisa mengimplementasikan banyak interface sedangkan class bisa mewarisi class lain dan mengimplementasikan banyak interface
Kapan Menggunakan Enum ?

Kita bisa memakai enum kalau kita punya  koleksi data yang nilainya sudah pasti (tidak bisa berubah) seperti nama hari, nama musim, nama bulan









Interface Deque dan Class ArrayDeque di Java


Deque adalah Collection linear yang mendukung pemasukan dan penghapusan elemen dari kedua akhir dari struktur data.itu bisa berfungsi sebagai Queue dengan  FIFO (First-in First-out) dan bisa juga sebagai stack dengan LIFO (Last-in First-out)

Interface Deque extends terhadap Interface Queue

Class ArrayDeque memungkinkan kita untuk menggunakan Deque dan array yang bisa diubah ukurannya.ArrayDeque extends terhadap class AbstractCollection dan implements terhadap Interface Deque

Method-method Penting dari Deque

1.add(elemen), menambahkan elemen ke tail (akhir deque)
2.addFirst(elemen),menambahkan elemen ke head (awal deque)
3.addLast(elemen),sama seperti add


4.Offer,OfferFirst dan OfferLast,fungsinya sama dengan ketiga method di atas hanya saja bisa mengembalikan true jika pemasukkan berhasil


5.push(elemen),fungsinya sama seperti addFirst
6.pop(),menghapus elemen dari head dan mengembalikannya

7.removeFirst(),menghapus elemen yang ada di head
8.removeLast(),menghapus elemen yang ada di tail

9.poll(),mendapatkan dan menghapus elemen di head,atau mengembalikan null jika deque kosong
10.pollFirst(),sama seperti poll
11.pollLast(),sama seperti poll hanya saja yang dihapus dan didapatkan adalah elemen di tail
12.peek(),mendapatkan elemen di head tanpa menghapus,mengembalikan null jika deque kosong
13.peekFirst(),sama seperti peek
14.peekLast(),sama seperti peek tapi yang didapatkan adalah elemen di tail



Interface Queue dan Class PriorityQueue di Java


Queue artinya giliran. Kalau dalam java,Queue mengacu ke FIFO (First In First Out).Dalam FIFO, elemen pertama dihapus paling awal dan elemen terakhir dihapus paling akhir

karena Queue adalah sebuah interface maka Queue ini membutuhkan class concrete untuk mengimplementasikan method di dalam nya.Class yang paling umum digunakan untuk implements ke Queue adalah PriorityQueue dan LinkedList.Untuk LinkedList sudah pernah saya bahas jadi kali ini kita akan bahas PriorityQueue saja

sementara class PriorityQueue menyediakan fasilitas untuk menggunakan queue namun PriorityQueue tidak menyusun elemen berdasarkan FIFO.Untuk menggunakan PriorityQueue kita bisa mengimpor nya dengan menuliskan java.util.PriorityQueue.class PriorityQueue ini extends terhadap AbstractQueue dan implements terhadap Serializable

Untuk membuat PriorityQueue bisa seperti ini

PriorityQueue<String> giliran = new PriorityQueue<>();
Silahkan sesuaikan String untuk string,Integer untuk int,Double untuk double dan lain-lain

Untuk menambah elemen sama seperti Collection yg lain kita bisa menggunakan add()

giliran.add("Apa");
giliran.add("Kenapa");
giliran.add("Di mana");
giliran.add("Bagaimana");



Kita bisa menggunakan remove() saja tanpa parameter kalau kita ingin menghapus head(elemen pertama yang ditambahkan) dari queue  sedangkan remove() dengan parameter nama objek adalah untuk menghapus elemen dengan nama objek tertentu



Untuk print head kita bisa memakai element()

Method lain :

clear(), untuk membersihkan queue (menghapus semua elemen di dalam nya)
addAll(),untuk menambahkan semua elemen dari Collection yang lain seperti ArrayList, LinkedList dan lain-lain
poll(), untuk mendapatkan sekaligus menghilangkan head dari queue atau mengembalikan null jika queue kosong
peek(), untuk mendapatkan head atau mengembalikan null jika queue kosong