Perbedaan Abstract Class dengan Interface Class

assalamualikum wr.wb,

  disini saya akan menjelaskan tentang Abstract Class dan Interface Class hal yang saya ini detailkan adalah tentang perbedaan antara dua class tersebut.

okey,check it out guys hehe


Berikut ini adalah perbedaan abstract class dan interface di Java.

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.


sumber : https://maniakjava.wordpress.com/2011/07/04/perbedaan-abstract-class-dan-interface-di-java/


Tugas Pengamatan dan Source Code "Abstarct Class" 


abstract class Abstractclass{
   
    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 "ConcretedClass2";
    }
    public String prefixValue (String prefix){
        return prefix+"ConcretedClass2";
    }
}




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)_"));
       
    }
}

 

Soal Pengamatan

  1. Bolehkah ditambahkan body "{statement1; statement1;}" pada method getValue ataupun method prefixValue pada class abstract AbstractClass? Jelaskan!

  2. Kembalikan program seperti semula, jelaskan error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di hapus!

  3. Kembalikan program seperti semula, selanjutnya perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1 dan ConcreteClass2! Jelaskan apa maksudnya!

  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


Jawaban Pengamatan "Abstract Class"

  1. Tidak boleh, karena  method abstract pada soucecodenya berupa statement yang tidak ikut kedalam method parents tetapi ke child method.
  2.  Akan terjadi error karena ketika getValue dihilangkan  maka method perintah statement dari getValue akan berada di dalam class parents. 
  3. Di setiap class ada hak akses .
  4. ConcreteClass1 tidak termasuk method dari abstract,jadi tidak ada override  ketika berada di parent's class nya.
  5. Karena ketika ConcreteClass 1 diubah maka  terjadi error karena abstarct class  tidak boleh berada di object yang telah dibuat. 
  6. class Main
    {
     public static void main(String args[]) {

     ConcreteClass1 class1 = new ConcreteClass1();
     class1.printOut();
     System.out.println( class1.prefixValue("Mr. Tatank hobi meloncat") );
       
      ConcreteClass2 class2 = new ConcreteClass2();
      class2.printOut();
      System.out.println( class2.prefixValue("Mrs. Kells hobi melet") ); System.Out,println();
        }
       }

  •  
    Tugas Pengamatan dan Source Code "Interface"
     
    interface Mobil {
        public void setMerk(String Merk);
        public 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;
        }
       
    }

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


    class Main1{
        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());
        }
    }

    Soal Pengamatan


     1. Compile kode program diatas dan jelaskan sebab error yang terjadi!

    2. Tambahkan method yang diperlukan untuk mengatasi error yang terjadi (No. 1)! 

    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!

    - Jelaskan perbedaan body program antara class abstract dan interface! 

    - Jelaskan perbedaan penggunaan extends antara soal 1 dan soal 2!

    Jawaban Pengamatan "Interface"

    1. Terjadi Error dikarenakan  class Mobil2 tidak mempunyai Override get dan set void. dan juga bukan  berupa class abstract karena termasuk ke class interface.
    2. Done
    3. Akan error dikarenakan class interface tidak diperbolehkan memakai method biasa, diharuskan menggunakan method abstract. 
    -yang terjadi adalah kosong.
    -body program menggunakan abstract extends
      sedangkan body program  menggunakan Interface Implements. 
    -extends di soal no 1  memperlihatkan adanya  child dari class abstract dan 
                  di soal no 2 memperlihatkan child dari interface tersebut.n
    sekian penjelasan dari saya jika ada kesalahan mohon diperbaiki karena manusia tidak luput dari kesalahan hehe walamualikum wr.wb  :)


  • Komentar

    Postingan populer dari blog ini

    Cara Cepat Microsoft Word Agar Semua Kata-Kata Bahasa Inggris Menjadi Miring

    Kesan & Pesan belajar Sistem Informasi Manajemen di Universitas Telkom

    Transaction Processing System (TPS)