Kamis, 31 Maret 2016

Perbedaan abstract dan interface pada java



Hallo guys , di postingan ini gua bakal jelasin tentang abstract class sama interface, langsung aja yaa.
Abstract Class merupakan Class yang khusus dibuat untuk keperluan inheritance. Tujuan dari pembuatan abstract class ini ialah untuk membuat definisi umum bagi class-class yang akan menjadi turunan darinya. Abstract Class dapat digunakan untuk mendefinisikan method yang nantinya akan diimplementasi di Derived Class (kelas turunan / inherit dari Abstract Class ).

      Pengertian Interface
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 jika ingin mengaplikasikan suatu method yang spesifik, yang tidak diperoleh dari proses inheritance. Tipe data yang boleh pada interface hanya tipe data konstan.

Penjelasan Tentang Abstract Dan interface :
·         Beberapa perbedaan Interface dan Kelas Abstrak yaitu :
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.
Abstract Class
Interface Class
Bisa berisi Abstract dan non Abstract method
Hanya Boleh Berisi Abstract method
Bisa Mendeklarasikan Constant dan Instance
Hanya bisa mendeklarasikan Constrant
Method boleh bersifat static dan Final
Method tidak boleh bersifat static dan final
Suatu abstact class hanya bisa meng-extend satu abstract class lainnya.
Suatu interface hanya bisa meng-extend interface lainnya.  Dan tidak bisa meng-implement class atau interface lainnya.








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.

Key word di java:

Private
Kata kunci yang digunakan dalam pembagian lapangan, metode, atau kelas batin,
anggota swasta hanya dapat diakses oleh anggota lain dari kelas mereka sendiri.

 Public
Piblic kata kunci yang digunakan dalam deklarasi metode, kelas, atau bidang, kelas
umum, metode dan bidang dapat diakses oleh anggota dari setiap kelas.

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.

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.

 Implement
Untuk menentukan satu atau lebih interface yang diimplementasikan oleh kelas saat
ini. Kelas A mewarisi jenis dan metode abstrak dinyatakan oleh interface.

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.

 pengamatan 1 (abstract class)>>> coba dulu aja guys


abstract class AbstractClass
{
abstract protected String getValue();
abstract protected String prefixValue(String prefix);
abstract protected String gabung();
public void printOut()
{
System.out.println(this.getValue());
}
}

    class ConcreteClass1 extends AbstractClass
{
protected String getValue()
{
return "Tatank";
}
public String gabung()
{
String a="Mr.tatank hoby meloncat";
return a;
}
public String prefixValue(String prefix)
{
return prefix + "Tatank";
}
}
    class ConcreteClass2 extends AbstractClass
{
public String getValue()
{
return "kelly";
}
public String gabung()
{
return "Mrs.kels hobi melet";
}
public String prefixValue(String prefix)
{
return prefix + "kelly";
}
}

class mainn
{
public static void main (String args [])
{
ConcreteClass1 class1 = new ConcreteClass1();
class1.printOut();
System.out.println(class1.prefixValue("Mr."));
System.out.println(class1.gabung());
ConcreteClass2 class2 = new ConcreteClass2();
class2.printOut();
System.out.println(class2.prefixValue("Mrs."));
System.out.println(class2.gabung());
}
}
pertanyaan:
1.bolehkah di tambah statemen pada method get value? atau prefix value pada abstract class?
2.pakah yang terjadi ketika getvalue() pada concreteclass di hapus?
3.jelaskan perbedaan hak akses pada getvalue() pada child class concreteclass1 dan concreteclass2!
4.buatlah abstract method yg bernama getvalue2() pada concreteclass1 apa yg terjadi?
5.ubah concreteclass1 menjadi abstract class , apa yang terjadi?

 jawaban :
1.Pada abstrack method tidak boleh di isikan body, hanya bisa deklarasi saja
2. ada nya kesalahan penulisan atau deklarrasi pada method .. yang harus nya ada nama methodnya
3 di concrete1 get value nya menggunakan protected yang hanya bisa di akses oleh class turunan sedangkan di concrete2 menggunakan hak akses public yang dapat di akses oleh semua class
4. terjadi error krn seharus nya tdiak bileh ada mehod abstract dalam suat konkrate class
5. terjadi error karena pada class abstract tidak boleh di buat objek nya


ini contoh yang interface


 interface Mobil
{
abstract void setMerk(String merk);
    abstract String getMerk();
}
interface Mesin extends Mobil
{
public void setNoMesin(String nomor_mesin);
public String getNoMesin();
}

 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;
}
}

 abstract 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 Mainterface
{
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());
}
}

pertanyaan 2 
1.coba abstract class mobil2 di ganti jadi public , apa yang terjadi?
2.apa yang terjadi jika di tambahkan method biasa yan mengandung body pada interface mobil, kelaskan !
3.jelaskan perbedaan body program antara class abstract sma interface !

Pengamatan 2
1 .dikarenakan Mobil2 itu bukan abstract class dan tidak override method gerMark pada classMobil
   harus tambahkan abstract di depan class mobil 2
2.dia akan menjadi error karena di class interface smua method nya harus abstrak method, di abstract method itu tidak boleh ada body hanya deklarasinya saja
3.klo abstrak class method boleh ada abstract dan boleh ada concrete mothod sedang interface hanya bisa abstract method saja.

itu aja sih yang bisa gua tampilin, terlebih dan terkurang tolong di maafin :)

2 komentar: