Perbedaan Abstract Dan Interface
Perbedaan abstract kelas Dan interface Pada Dasarnya Adalah bahwa abstract masih dapat meneripa methode ataupun atribut yang kongkrit sedangkan interface tidak dapat di terima.
Perbedaan dijelaskan oleh tabel di bawah ini yang dibuat oleh maniakjava.wordpress.com
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. |
Pre-test
1) abstract class adalah inheritance yang dapat berisi
konkrit sedangkan interface tidak dapat mempunyai method dan atribut yang konkrit
dan isinya konstanta
2) kalau kelas abstrak masih dapat menampung di dalamya
atribut dan method yang kongkrit sedangkan interface tidak
3) abstract method untuk membuat method abstrak
extends untuk dapan mendeklarasikan menjadi inheritance
implements untuk menentukan satu atau lebih interface yang
di implementasikan oleh kelas saat ini
override itu adalahpenggunaan methode yang sama dalam kelas
yang berinheritance
public untuk menytakan bahwa tersebut umum
protected untuk menyatakn bahwa tersebut bisa digunakan
tidak hanya di kelasnya saja
private untuk menyatakan bahwa method maupun atribut dapat
di gunakan dalam kelas itu saja
parent class untuk menyatakan bahwa ini adalah kelas induk
child class untuk menyatakan bahwa ini adalah kelas anak
dari kelas induk
this untuk menyatakan parameter sama dengan variabel di atas
pengamatan 1
2) karena tidak ada method get value dan tidak terjadinya
abstract class jarean prefix
3) perbedaanya adalah pengembalian mendapatkan nilanya dan
juga nama yang dituju kelas
4) karena method abstract tidak bisa memiliki body
5) karena masalahnya jika di buat lagi masih sama dengan
nomor 4
6)
abstract class AbstractClass
{
// Force Extending
class to define this method
abstract protected
String getValue();
abstract protected
String prefixValue(String prefix);
abstract
protected String gabung();
// Common method
public void
printOut() {
System.out.println( this.getValue() );
}
}
class ConcreteClass1 extends AbstractClass
{
public
String gabung(){
String
a;
a
= " Hobi Loncat";
return
a;
}
protected
String getValue() {
return
"TATANK";
}
public String
prefixValue(String prefix) {
return
prefix + "Mr. Tatank";
}
}
class ConcreteClass2 extends AbstractClass
{
public
String gabung(){
String
b;
b
= " Hobi Melet";
return
b;
}
public String
getValue() {
return
"kelss";
}
public String
prefixValue(String prefix) {
return
prefix + "Mrs. Kells";
}
}
class mainan1
{
public
static void main(String args[]) {
ConcreteClass1
class1 = new ConcreteClass1();
class1.printOut();
System.out.println(
class1.prefixValue("") );
System.out.println(class1.prefixValue("")
+ class1.gabung());
ConcreteClass2
class2 = new ConcreteClass2();
class2.printOut();
System.out.println(
class2.prefixValue(""));
System.out.println(
class2.prefixValue("") + class2.gabung());
}
}
Pengamatan 2
1)dikarenakan Karena mobil2 bukan abstract class
2) tambahkan abstract pada interface
3)- error karena tidak bisa mengandung body
interface Mobil
{
abstract public void setMerk(String merk);
abstract 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
abstract class Mobil2 implements Mesin
{
private String nomor_mesin;
public void setNoMesin2(String nomor_mesin2){
this.nomor_mesin = nomor_mesin;
}
public String getNoMesin(){
return nomor_mesin;
}
}
class mobilan{
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() );
}
}
Comments
Post a Comment