Hai temen-teman kali ini kita akan membahas masalah
apa itu abstract class dan interface dalam java. Dalam blog yang akan saya buat
ini akan menjelas kan semua tentang dari abstract class dan interface hehe. Oke
semua nya santai aja dulu siapin kopy sama roti ya sebelum membaca blog ini. Di
dalam blog ini saya akan membahas tentang perbedaan abstract class dan
interface dan juga akan memberikan contoh contoh dari abstract class dan
interface dan jua akan membahas Jenis-jenis keyword pada Java dan fungsinya. Ya
udah kita mulai aja ya;
Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki
kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya, sehingga
abstract class tidak dapat diinstansiasi secara langsung menjadi object. Suatu
abstract class bisa mengandung method kongkrit dan/atau method abstract.
Abstract method meruapakan suatu method yang tidak mempunyai badan method.
Hanya berupa nama method dan parameter inputan method.
Contoh Abstract Class :
public
abstract class MahlukHidup {
protected boolean BisaTerbang = false; protected String Nama; abstract void bernafas ( ) ; |
Interface adalah kumpulan method yang hanya memuat
deklarasi dan struktur method, tanpa detail implementasinya. Sedangkan detail
dari method berada pada class yang mengimplementasikan interface tersebut.
Interface digunakan bila Anda ingin mengaplikasikan suatu method yang spesifik,
yang tidak diperoleh dari proses inheritance. Tipe data yang boleh pada
interface hanya tipe data konstan. Setelah mengetahui apa itu
interface.
public class NamaKelas
implements NamaInterface {
public void namaProsedur(){
// isi prosedur }
public TipeData namaFungsi(){
// isi fungsi }}
implements NamaInterface {
public void namaProsedur(){
// isi prosedur }
public TipeData namaFungsi(){
// isi fungsi }}
Beberapa perbedaan Interface dan Abstract Class :
– Interface hanya bisa mendefinisikan Method, tidak bisa
mengimplementasikan, sedangkan Abstrat Class bisa
mengimplementasikan Method
– Interface tidak boleh terdiri dari field atau property,
Abstract Class bias
– Interface tidak boleh terdiri dari konstruktor dan destruktor,
sedangkan Abstract class bisa:
Abstract class
|
Interface
|
Bisa berisi abstract
dan non-abstract method.
|
Hanya boleh berisi
abstract method.
|
Kita harus
menuliskan sendiri modifiernya.
|
Kita tidak perlu
susah2 menulis public abstract di depan nama method. Karena secara implisit,
modifier untuk method di interface adalah public danabstract.
|
Bisa
mendeklarasikan constant dan instance variable.
|
Hanya bisa
mendeklarasikan constant. Secara implisit variable yang
dideklarasikan di interface bersifatpublic, static dan final.
|
Method boleh
bersifat static.
|
Method tidak boleh
bersifat static.
|
Method boleh
bersifat final.
|
Method tidak boleh
bersifat final.
|
Suatu abstact class
hanya bisa meng-extend satu abstract class lainnya.
|
Suatu interface bisa
meng-extend satu atau lebih interface lainnya.
|
Suatu abstract class
hanya bisa meng-extend satu abstract class dan meng-implement beberapa
interface.
|
Suatu interface
hanya bisa meng-extend interface lainnya. Dan tidak bisa
meng-implement class atau interface lainnya.
|
perbedaan class abstract dan interface
Abstract Class dikatakan Abstract karena class tersebut tidak
diimplementasikan secara langsung di class tersebut. Melainkan
diimplementasikan di class lain yang merupakan class anak dari abstract class
itu. Itulah sebabnya dinamakan abstract class. Berikut perbedaan antara class
abstract dengan interface:
- Abstract class dapat memiliki
tipe data dengan semua tipe data, sedangkan interface tipe datanya hanya
berupa konstanta
- Method pada abstract class
dapat berupa method kongkrit dan method abstract. Sedangkan pada interface
semua method harus berupa method abstract.
- Interface Class jelas berbeda
dengan abstract class. Karena class ini mengimplementasikan methodnya di
class lain dihubungkan dengan kata “implements”. Method class interface
tadi diimplementasikan dengan nama method yang sama di class
- yang diimplementasikan.
Jenis-jenis keyword pada Java dan fungsinya
1. Abstract
Abstrac adalah kata kunci yang digunakan
untuk menyatakan kelas atau metode untuk
menjadi abstract. Sebuah metode tidak
memiliki implementasi, semua kelas yang
berisi metode abstract harus dari mereka
abstrak, walaupuntidak semua kelas abstrak
memiliki metode abstrak.Objek dari kelas
abstrak tidak dapat instantiated, tetapi dapat
diperpanjang olh kelas lain. Semua subclass
dari kelas abstrak harus menyediakan
implementasi untuk semua metode abstrak,
atau juga harus abstrak.
2. Assert
Assert merupakan kata kunci yang
ditambahkan dalam J2SE 1,4, digunakan untuk
membuat pernyataan yang programmer percaya
selalu benar dititik dalam program.
Jika pernyataan akan diaktifkan ketika
program dijalankan dan ternyata bahwa
pernyataan adalah palsu, Kata kunci ini
dimasukkan untuk membantu dalam
debugging.
3. Byte
Byte kata kunci yang digunakan untuk
menyatakan suatu bidang yang dapat
menyimpan sebuah 8 – bit menandatangani dua
complement integer. Kata kunci ini
juga digunakan untuk menyatakan bahwa suatu
metode mengembalikan nilai tipe
byte.
4. Break
Digunakan untuk melanjutkan pelaksanaan
program dipernyataan segera setelah blok
melampirkan saat ini ataupernyataan jika
diikuti sebuah label.
5. Case
Case digunakan untuk membuat kasus-kasus individu
dalam pernyataan switch.
6. Class
Suatu jenis yang mendefinisikan
implementasi dari jenis objek tertentu. Sebuah
defenisi kelas mendefinisikan instance
kelas bidang dan metode dan kelas batin serta
menetukan antar muka kelas dan segera
mengimplementasikan superclass kelas. Jika
superclasstidak secara eksplisit
ditentukan, superclass secara implicit object.
7. Default
Default digunakan dalam sebuah pernyataan
switch untuk label blok pernyataan yang
akan dieksekusi jika tidak ada case cocok
dengan nilai yang ditentukan.
8. Else
Kata kunci ini dapat digunakan bersama if
untuk membuat penyataan if-else yang
mengujisuatu ekspresi Boolean, jika
ekspresi bernilai true, blok pernyataan yang
berhubungan dengan if dievaluasi, jika ia
bernilai false blok, dari laporan yang
berkaitan dengan else dievaluasi.
9. Import
Digunakan pada awal sebuah file sumber
untuk menentukan kelas atau seluruh paket
JAVA untuk disebut kemudian tanpa termasuk
paket-paket mereka nama-nama dalam
referensi. Sejak J2SE 5.0, import laporan
dapat mengipor statc anggota kelas.
10. If
If digunakan untuk membuat pernyataan jika
yang menguji suatu ekspresi bernilai
true, blok pernyataan yang berhubungan
dengan jika pernyataan dijalankan. Kata
kunci ini juga dapat digunakan untuk
membuat pernyataan jika lai.
11. New
New digunakan untuk membuat sebuah instance
dari sebuah kelas atau array.
12. Package
Sekelompok jenis paket dinyatakan dengan
package kata kunci.
13. Int
Adalah kata kunci yang digunakan untuk
menyatakan sebuah lapangan yang dapa
memegang 32-bit masuk integer melengkapi
dua. Kata kunci ini juga digunakan untuk
menyatakan bahwa metode yang mengembalikan
nilai int.
14. Interface
Digunakan untuk menyatakan tipe khusus
kelas yang hanya berisi metode abstrak,
konstan (static final) bidang dan static
interface. Hal ini nantinya akan
diimplementasikan oleh kelas yang
menyatakan antarmuka dengan implementasi kata
kunci.
15. Long
Long kata kunci digunakan unuk menyatakan
sebuah lapangan yang dapat memegang
64-bit masuk integer yang melengkapi dua.
Kata kunci ini digunakan untuk
menyatakan bahwa metode yang mengembalikan
nilai tipe long.
16. Native
Digunakan dalm deklarasi metode untuk
menentukan bahwa metode ini tidak
diimplementasikan dalam file sumber java
yang sama, melainkan dalm bahasa lain.
17. Private
Kata kunci yang digunakan dalam pembagian
lapangan, metode, atau kelas batin,
anggota swasta hanya dapat diakses oleh
anggota lain dari kelas mereka sendiri.
18. Public
Piblic kata kunci yang digunakan dalam
deklarasi metode, kelas, atau bidang, kelas
umum, metode dan bidang dapat diakses oleh
anggota dari setiap kelas.
19. Static
Digunakan untuk menyatakan sebuah lapangan,
metode atau kela batin sebagai
bidang kelas. Kelas mempertahankn satu
salinan bidang kelas terlepas dari berapa
banyak contoh yang ada dari kelas itu.
Static juga digunakan untuk mendefinisikan
sebuah metode sebagai metode kelas. Kelas
metode yang terikat ke kelas, bukan ke
contoh spesifik, dan hanya dapat beroperasi
pada kolom kelas. (kelas dan interface
dideklarasikan sebagai static anggota lain
kelas atau interface sebenarnya top-level
kelas dan tidak inner class).
20. Return
Digunakan untuk menyelesaikan pelaksanaan
metode. Hal ini dapat diikuti oleh suatu
nilai yang dapt diperlukan oleh defenisi
metode yang dikembalikan ke pemanggil.
21. This
Digunakan untuk mewakili sebuah instance
dari kelas dimana ia muncul. This dapat
digunakan untuk mengakses anggota kelas
sebagai referensi. This juga kata kunci
digunakan untuk meneruskan panggilan dari
satu konstuktor dikelas untuk konstuktor
lain dikelas yang sama.
22. Throw
Kata kunci yang digunakan untuk menangani
exception jenis tugas yang kompatibel.
Jikatik adahandler pengecualian tersebut
ditemukan dalam metode yang sekarang,
maka kembali metode dan proses ini diulang
dalam metode distack, maka
pengecualian dilewatkan kehandler
pengecualian theard itu tidak tertangkap.
23. Try
Medefinisikan blok pernyataan yang telah
exception handling. Jika pengecualian
dilemparkan dalam try blok, opsional catch
blok dapat menagani menyatakan jenis
pengecualain. Juga,opsionalfinally blok
dapat dideklarasikan yang akan dijalankan
ketika keluar eksekusi try blok dan catch
klausa, telepas dari apakah pengecualain
dibuang atau tidak. Sebuah try blok harus
memilki minimal satu catch klausa atau
finally blok.
24. Void
Kata kunci yang digunakan untuk menyatakan
bahwa suatu metode tidak
mengembalikan nilai apapun.
25. Volatile
Digunakan dalam deklarasi lapangan untuk
menentukan bahwa variabel yang diubah
asynchronously oleh bersamaan menjalankan
thread, metode, kelas dan interface
sehingga tidak dapat dideklarasikan
volative.
26. While
Kata kunci digunakan untuk membuat loop
semntara, ynag menguji suatu ekspresi
Boolean dan mengeksekusi blok pernyataan
yang berhubungan dengan loop jika
ekspresi bernilai true, ini terus sampai
ekspresi bernilai false. Kta kunci ini juga dapat
digunakan untuk membuat sebuah
do-while-loop.
27. Boolean
Kata kunci yang digunakan untuk menyatakan
suatu bidang yang dapat menyimpan
suatu nilai Boolean, yaitu baik true atau
false. Kata kunci ini juga digunakan untuk
menyatakn bahwa metode yang mengembalikan
nilai tipe Boolean.
28. Char
Char kata kunci digunakan untuk menyatakan
bidang yang dapat menyimpan 16-bit
Unicode karakter. Kata kunci ini juga
digunakan untuk menyatakan bahwa metode
yang mengembalikan nilai tipe char.
29. Catch
Mendefinisikan sebuah handler pengecualian
kelompok pernyataan yang dieksekusi
jika pengecualian dilemparkan diblok
ditentukan oleh sebelumnya try kata kunci,
kode ini akan dijalankan hanya jika kelas
pengecualian dilemparkan adlah tugas
kompatibel dengan kelas pengecualian
dideklarasikan oleh catch klausa.
30. Const
Meskipun reserved sebagai kata kunci
dijava, const tidak digunakan dan memiliki
fungsi.
31. Continue
Digunakan untuk melanjutkan eksekusi
program pada akhir tubuh loop saat ini. Jika
diikuti dengan label, continue eksekusi
kembali pada akhir tubuh loop brlabel
melampirkan.
32. Do
Kata kunci yang dpat digunakan bersama
dengan whie untuk membuat sebuah dowhile
loop, yang menjalankan suatu blok statement
berkaitan dengan loop dan
kemudian tes ekspresi Boolean yang dapat
berkait dengan while, jika ekspresi bernilai
true, blok dijalankan lagi, ini trussampai
ekspresi bernilai false.9\
33. Double
Kata kunci yang digunakan untuk menyatakan
sebuah lapangan yang dapat
memegang 64-bit. Kata kunci ini juga
digunakan untuk menyatakan bahwa
suatumetode megembalikan nilai tipe double.
34. Enum
Sebuah java kata kunci yang igunakan untuk
mendeklarasikan tipe enumerasi. Matri
memperpanjang kelas dasar enum.
35. Extends
Digunakan dalm sebuah deklarasi kelas untuk
menetukan superclass, digunakan
dalam deklarasi interface nutuk menentukan
satu atau lebih superinterface. Kelas X Y
meluas kelas untuk menmbah fungsionalitas,
baik dengan menambahkan field atau
metode ke Y kelas, atau dengan
meng-overridemetode kelas Y. Antarmuka Z
memperluas satu atau lebih interface dengan
menmbahkan metode. Kelas X dikatakan
sebagai subclass Y kelas, interface Z
dikatakan sebagai interface dari interface itu
meluas. Juga digunakan untuk menentukan
batas atas sebuah ketik Generics.
36. Final
Mendefinisikan entitas sekali yang tidak
dapat diubah atau berasal dari nanti. Lebih
spesifk, sebuah kelas akhir tidak dapat subclassed,
metode akhir tidak dapat diganti,
dan variabel final dapat trjadi paling
banyak sekali sebagai ekspresi kiri. Semua
metode dikelas terakhir secara implicit
final.
37. Finaly
Digunakan untuk mendefinisikan suatu blok
statement nutuk blok yang ditetakan
sebelumnya oleh try kata kunci. Yang finaly
blok dijalankan setelah keluar eksekusi
try blok dan apapun yang terkait catch
klausa terlepas dari apakah pengecualian
terlempar atau tertangkap, atau eksekusi
meninggalkan metode ditengah try atau catch
blok menggunakan return kata kunci.
38. Float
Float kata kunci digunakan untuk menyatakan
sebuah lapanagn yang dapa memegang
32-bit persisi tunggal IEEE 754-angka
floating point. Kata kinci ini juga digunakan
untuk menyatkan bahwa suatu metode
mengembalikan tipe float.
39. For
For kata kunci digunakan untuk membuat
loop, yang menmpatkan inisialiasai
variabel, suatu ekspresi Boolean, dan suatu
incrementation. Inisialisasi variabel
dilakukan terlebih dahulu, kemudian
ekspresi Boolean dievaluasi. Jika ekspresi
bernilai true, blok pernyataan yang
berhubungan loop dijalaankan dan kemudian
incrementation yang dilakukan.
40. Goto
Meskipun receved sebagai kata kunci dijava,
goto tidak digunakan dan memiliki
fungsi pada java.
41. Implement
Untuk menentukan satu atau lebih interface
yang diimplementasikan oleh kelas saat
ini. Kelas A mewarisi jenis dan metode
abstrak dinyatakan oleh interface.
42. Instanceof
Sebuah operator biner yang menggunakan
sebuahreferensi objek sebagai operan
pertama dan kelas atau antar muka sebagai
operan kedua dan menghasilkan hasil
Boolean.
43. Protected
Kata kunci yangdigunakan dalam pembagian
lapangan, metode,atau kelas batin,
anggota yang dilindungi hanya dapat diakse
oleh anggota kelas mereka sendiri, bahwa
kelas itu subclass atau kelas yang sama.
44. Strictfp
Sebuah java kata kunci yang digunakan untuk
membatasi persis dan pembulatan
pehitungan floating point untuk memastikan
portabilitas.
45. Super
Untuk mengakse anggota kelas diwariskan
oleh kelas dimana ia muncul. Super kata
kunci juga digunakan untuk meneruskan
panggialn dari konstruktor di superclass.
46. Switch
Kata kunci yang digunakan dalam hubunganya
dengan case dan default untuk
membuat pernyataan swtch,yang mengavaluasi
sebuah variable, nilai cocok untuk
tertentu case,dan engeksekusi blok
pernyataan terkait dengan case.
47. Transient
Menytakan bahwa medan bukan contoh default
seri bentuobjek.
48. Synchronized
Digunakan dalam deklarasi atau blok kode
metode untuk mendapatkan mutex kunci
untuk objek sedangkan saat benag
mengekekusi kode.
49. Throws
Digunakan dalam deklarasi metode untuk
menentukan pengecualian tidak ditangani
dalam metode melainkanditeruskan ketingkat
yang lebih tniggi berikutnya program.
Semua tertngkap pengecualian dalam sebuah
metode yang tidak kasus
RuntimeException harus dideklarasikan
menggunakan throws kata kunci.
50. Short
Short kata kunci digunakan untuk menyatakan
bidang bisa menampung 16-bit integer
melengkapi menandatangi dua. Kata kunci ini
juga digunaka untuk menyatakan
bahwa metode yang mengembalikan nilai tipe
short.
*/
abstract class AbstractClass
{
// Force Extending class to define this method
abstract protected String getValue();
abstract protected String prefixValue(String prefix);
// Common method
public void printOut() {
System.out.println( this.getValue() );
}
}
class ConcreteClass1 extends AbstractClass
{
protected
String getValue() {
return "ConcreteClass1";
}
public String prefixValue(String prefix) {
return
prefix + "ConcreteClass1";
}
}
class ConcreteClass2 extends AbstractClass
{
public String getValue() {
return "ConcreteClass2";
}
public String prefixValue(String prefix) {
return
prefix + "ConcreteClass2";
}
}
class Main
{
public
static void main(String args[]) {
ConcreteClass1
class1 = new ConcreteClass1();
class1.printOut();
System.out.println(
class1.prefixValue("FOO_") );
ConcreteClass2
class2 = new ConcreteClass2();
class2.printOut();
System.out.println(
class2.prefixValue("FOO_") );
}
}
/*
Pengamatan:
1.
Bolehkah ditambahkan body "{statement1;
statement1;}" pada method getValue ataupun method prefixValue pada class abstract
AbstractClass? Jelaskan!
Jawab : terjadi eror dikarekan absctract class tidak lah boleh di
tambahkan di methodnys {}
2.
Kembalikan program seperti semula, jelaskan
error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di
hapus!
Jawab : terjadi eror di karenakan class ConcreteClass itu adalah sebagai
output untuk program tersebut
3. Kembalikan program seperti semula,
selanjutnya perhatikan perbedaan hak akses method getValue() di child class
ConcreteClass1 dan ConcreteClass2! Jelaskan apa maksudnya!
Jawab : di class ConcreteClass1 dan
ConcreteClass2 maksud nya adalah untuk menjadi hasil agar kodingan tersebut
mengeluarkan output seperti itu
4. Buatlah abstract method yang bernama
getValue2 pada class ConcreteClass1! Compile dan mengapa terjadi error?
5. Ikuti soal nomor 4, silahkan ubah class
ConcreteClass1 menjadi abstract. Selajutnya jelaskan mengapa terjadi error?
6. Dengan mengikuti struktur kode program
di atas serta ditambahkan satu abstract method bernama "gabung" TANPA
PARAMETER pada parent class, hasilkan output berikut:
Tatank
Mr.
Tatank
Mr.
Tatank hobi meloncat
Kells
Mrs.
Kells
Mrs.
Kells hobi melet
Jawab: abstract class AbstractClass
{
// Force Extending class to define this method
abstract protected String getValue();
abstract protected String prefixValue(String prefix);
// Common method
public void printOut() {
System.out.println( this.getValue() );
}
}
class ConcreteClass1 extends AbstractClass
{
protected
String getValue() {
return "ConcreteClass1";
}
public String prefixValue(String prefix) {
return
prefix + "ConcreteClass1";
}
}
class ConcreteClass2 extends AbstractClass
{
public String getValue() {
return "ConcreteClass2";
}
public String prefixValue(String prefix) {
return
prefix + "ConcreteClass2";
}
}
class Main
{
public
static void main(String args[]) {
ConcreteClass1
class1 = new ConcreteClass1();
class1.printOut();
System.out.println(
class1.prefixValue("FOO_") );
ConcreteClass2
class2 = new ConcreteClass2();
class2.printOut();
System.out.println(
class2.prefixValue("FOO_") );
}
}
*/
interface Mobil
{
public void setMerk(String merk);
public String getMerk();
}
interface Mesin extends Mobil
{
public void setNoMesin(String nomor_mesin);
public
String getNoMesin();
}
// This will work
class Mobil1 implements Mesin
{
private
String merk, nomor_mesin;
public void setMerk(String merk){
this.merk
= merk;
}
public
String getMerk(){
return
merk;
}
public void setNoMesin(String nomor_mesin){
this.nomor_mesin
= nomor_mesin;
}
public
String getNoMesin(){
return
nomor_mesin;
}
}
// This will not work and result in a fatal
error
class Mobil2 implements Mesin
{
private
String nomor_mesin;
public
void setNoMesin(String nomor_mesin){
this.nomor_mesin
= nomor_mesin;
}
public
String getNoMesin(){
return
nomor_mesin;
}
}
class Main{
public
static void main(String[] args){
Mobil1
m1 = new Mobil1();
m1.setMerk("Ford");
m1.setNoMesin("01010");
System.out.println(
m1.getMerk() );
System.out.println(
m1.getNoMesin() );
}
}
/*
Pengamatan:
1.
Compile kode program diatas dan jelaskan sebab
error yang terjadi!
Jawab: dikarenakan ada salah satu bentuk koding diatas yang tidak sesuai
dengan kodingan utama nya dan method yang di berikan juga salah
2.
Tambahkan method yang diperlukan untuk mengatasi
error yang terjadi (No. 1)!
Jawab: method yang di tambahkan harus method yang sesuai agar method
tersebut tidak mengalami eror
3. Perhatikan soal 1 (abstract) dan soal 2
ini (interface) dan lakukan poin-poin berikut:
- Apa yang terjadi apabila ditambahkan
method biasa yang mengandung body "{}" pada interface Mobil?
Jelaskan!
Akan terjadi eror di karena kelas interface
hanya boleh di tambahkan dengan tipe data konstan saja
- Jelaskan perbedaan body program antara
class abstract dan interface!
Jawab: tipe data yang di sedia kan berbeda
sangat jelas dan struktur pengodingan juga terlihat berbeda.
- Jelaskan perbedaan penggunaan extends
antara soal 1 dan soal 2!
Jawab; penggunaan extends di no 1 dan 2
adalah di no 1 berfungsi untuk menetukan class yang ada sedang kan di no 2 di
jelaskan untuk memanggil class yang lain.
*/
/*
Semoga bermanfaat bagi kalian hehe
terimakasih banyak asalamualaikum wr wb.