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 ClassInterface
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 bersifatpublicstatic 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
- Suatu abstact class hanya bisa meng-extend satu abstract class lainnya. & Suatu interface bisa meng-extend satu atau lebih interface lainnya.

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

Popular posts from this blog

yang di dapatkan setelah belajar tentang sistem bisnis

perjalanan,pengalaman dan manfaat yang telah didapat setelah belajar sim