Kelas abstrak adalah kelas yang tidak dapat dibuat instance nya. Semua fungsionalisasi dari suatu kelas tetap ada, dan field, method, dan konstruktornya tetap dapat diakses. Tetapi anda tidak dapat membuat instance dari kelas abstrak tersebut.
Kelas Abstrak
Gunakan kata kunci abstract untuk mendeklarasikan suatu kelas sebagai kelas abstrak. Kata kunci ini muncul pada deklarasi kelas sebelum kata kunci class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
public abstract class Karyawan { private String nama; private String alamat; private int nomor; public Karyawan(String nama, String alamat, int nomor) { System.out.println("Membuat satu Karyawan"); this.nama = nama; this.alamat = alamat; this.nomor = nomor; } public double computePay() { System.out.println("Dalam computePAY Karyawan"); return 0.0; } public void mainCheck() { System.out.println("Mengirim sebuah check untuk" + this.nama + " " + this.alamat); } public String toString() { return nama +" "+ alamat +" "+ nomor; } public String getName() { return nama; } public String getAdress() { return alamat; } public void getAdress(String alamatBaru) { alamat = alamatBaru; } public int getNumber() { return nomor; } } |
Kelas tersbeut tidak berbeda dengan kelas Karyawan sebelumnya. Kelas ini sekarang merupakan kelas abstrak, tetapi masih memiliki tiga field, tujuan method, dan satu konstruktor.
Berikut ini contoh kode untuk membaca kelas abstrak ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* File name : AbstractDemo.java*/ public class AbstractDemo { public static void main(String[] args) { /*Kode berikut akan menyebabkan eror"/ Karyawan k = new Karyawan("Geroge W. ", "Houston, TX", 43); System.out.println("\n Memanggil mailCheck dengan menggunakan refrensi Karyawan --"); k.mailCheck(); } } |
Kode tersebut akan menghasilkan error berikut:
1 2 3 4 |
Karyawan.java:46:Karyawan is abstract; cannot be instantiated Karayawan k = new Karyawan("George W.", "Houston, TX",43); " 1 error |
Anda dapat meng-extand kelas Karyawan sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* File : Gaji.java */ public class Gaji extends Karyawan { private double gaji; //Gaji tahunan public Gaji(String nama, String alamat, int nomor, double gaji) { super(nama, alamat, nomor); setSalary(gaji); } public void mailCheck() { System.out.println("Dalam mailCheck dari kelas Gaji "); System.out.println("Mengirim sebuah check untuk " + getName() + " dengan gaji " + gaji); } public double getSalary() { return gaji; } public void setSalary(double gajiBaru) { if (gajiBaru >= 0.0) { gaji = gajiBaru; } } public double computePay() { System.out.println("Menghitung pembayaran gaji untuk " + getName()); return gaji / 52; } } |
Pada bagian ini Anda tidak dapat membuat instance Karyawan baru, tetapi jika Anda membuat instance dari Gaji, objek Gaji tersebut akan mewarisi tiga field dan tujuh method dari Karyawan.
1 2 3 4 5 6 7 8 9 10 11 |
/* File : AbstractDemo.java*/ public class AbstractDemo { public static void main(String[] args) { Gaji g = new Gaji("Mohd Mohthasim", "Ambheta, UP", 3,3600.00); Gaji k = new Gaji("Jhon Adams", "Boston, MA", 2,2400.00); System.out.println("Memanggil mailCheck dengan menggunakanrefrensi Gaji --"); g.mailCheck(); System.out.println("\n Memanggil mailCheck dengan menggunakan refrensi Karyawan --"); k.mailCheck(); } } |
Kode tersebut akan menghasilkan output berikut:
1 2 3 4 5 6 7 8 9 |
Membuat satu Karyawan Membuat satu Karyawan Memanggil mailCheck dengan menggunakan refrensi Gaji == Dalam mailCheck dari kelas Gaji Mengirim sebuah Check untuk MohdMohtaslim dengan gaji 3600.0 Memanggil mailChechk dengan menggunakan refrensi Karyawan -- Dalam mailCheck dari kelas Gaji Mengirim sebuah check untuk JhonAdams dengan gaji 2400.0 |
Method Abstrak
Jika anda ingin suatu kelas memiliki method tetapi implementasi methodnya dilakukan pada subkelas, Anda dapat mendeklarasikan method tersebut sebagai abstrak.
Method abstrak tidak memiliki definisi, dan method tersebut diakhiri dengan tanda titik koma (;).
1 2 3 4 5 6 7 8 9 |
public abstract class Karyawan { Private String nama; Private String alamat; Private int nomor; public abstract double computePay(); // Definisi kelas selanjutnya .... } |
Mendeklarasikan sebuah method sebagai abstrak menyebabkan:
- Kelas tersebut juga harus dideklarasikan sebagai abstrak
- Semua subkelas harus mengoverride method tersebut atau mendeklarasikan diri sebagai abstrak.
- Jika Gaji mewarisi Karyawan, maka Gaji perlu mengimplementasikan method computePay():
1 2 3 4 5 6 7 8 9 10 11 12 |
/* File : Gaji.java*/ public class Gaji extend Karyawan { private double gaji; //Gaji tahunan public double computePay() { System.out.println("Menghitung pembayaran gaji untuk "+ getName()); return gaji/52; } //Definisi kelas selanjutnya .... } |