Saturday, 2 April 2016

Perbedaan Kelas Abstrak dan Inheritance


Haiii sobat koding,gimana nih kelancaran kodinganya??

Terima Kasih sudah mengunjungi website ini sobat koding , semoga website ini dapat membantu hari-hari sobat koding dalam urusan kodingan java nya yah, selalu menyebar energi positif dari kodingan sob!

 hari ini kita akan membahas tentang perbedaan antara kelas abstrak dan interface sobb, cusssssssssssssssssssssss !!

Prolog: 
Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya.
Abstract Class merupakan class yang tidak dapat diinstantiasi (new namaAbstrakClass).

Suatu abstract class bisa mengandung method kongkrit dan/atau method abstract.
Method dalam class abstract yang tidak mempunyai implementasi dinamakan method abstract.  Hanya berupa nama method dan parameter inputan method. Ketika suatu abstract class diturunkan/ di-extends, maka subclass harus mengimplementasikan semua method abstract pada parent/ base class. Jika tidak mengimplementasikan semua method abstract maka subclass harus dideklarasikan sebagai abstract class.

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.

Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari tipe object yang melewati pemanggil method interface

Untuk lebih jelasnya ada tabel perbedaan kelas abstract dan inteface.



INTERFACE
KELAS ABSTRAK

-Interface hanya bisa mendefinisikan Method, tidak bisa mengimplementasikan, sedangkan

-Interface tidak boleh terdiri dari field atau property,
-Interface tidak boleh terdiri dari konstruktor dan destruktor

Method tidak boleh bersifat static
Abstrat Class bisa mengimplementasikan Method


Abstract bisa.


Method boleh bersifat static.
Tidak perlu menulis public abstract di depan nama method. Karena secara implisit, modifier untuk method di interface adalah public dan abstract.
Modifiersnya harus dituliskan sendiri.
Method tidak boleh bersifat final
Met hod boleh bersifat final..
Hanya boleh berisi abstract method.
Bisa berisi abstract dan non-abstract method.
Suatu interface bisa meng-extend  satu atau lebih interface lainnya..
Bisa mendeklarasikan constant daninstance variable
Suatu interface hanya bisa meng-extendinterface lainnya.  Dan tidak bisa meng-implement class atau interface lainnya.
Suatu abstract class hanya bisa meng-extendsatu abstract class dan meng-implement beberapa interface.
Hanya bisa mendeklarasikan constant.  Secara implisit variable yang dideklarasikan di interface bersifat publicstatic dan final.
Suatu abstact class hanya bisa meng-extendsatu abstract class lainnya.



Penalaran analogi :

- Abstract class adalah mobil, kapal, pesawat class nya adalah Sedan, SUV, MPV, Sports, dll  (untuk mobil)
- Interface adalah Kendaraan darat, kendaraan laut, kendaraan udara.
interface ini memiliki method-method/fungsi-fungsi umum ketiga jenis kendaraan tersebut, yang masing-masing fungsinya harus didefinisikan di class-class yang spesifik.

Keyword – keyword seputar kelas abstrak dan interface :

·         Extends = Memanggil fungsi dari class sebelumnya, sehingga kita tidak perlu membuat fungsi lagi pada class yang akan dibuat.
·         Override= Fungsi untuk pengaplikasian fungsi method di nama method yang sama.
·         Public = Tipe  hak akses yang digunakan untuk mengakses method dan properti dan bisa diakses oleh class lain.
·         Protected = Tipe hak akses yang digunakan untuk mengakses method dan properti oleh class tersebut dan class turunannya.
·         Private = Tipe hak akses yang digunakan untuk mengakses method dan properti oleh class ersebut saja. 
·         Parent Class = Kelas yang mewarisi (Super-class)
       Child class = Kelas yang diwarisi (Sub-Class)
·         Abstract Method= Method yang tidak memiliki body method sehingga tidak terbentuk objeknya  maka  di override.



Pengamatan Praktikum Alpro Lanjut JAVA 2016/02/31 :

Dilraj Putra / 6701151059 /  D3MI-39-04

Soal :
Abstract


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());

System.out.println(this.gabung());

}

}
class ConcreteClass2 extends AbstractClass{
    @Override
    public String getValue(){
        return "Kelis";
    }
// Dilraj Putra 6701151059 D3MI3904 Kelompok 6
 
    @Override
    public String prefixValue (String prefix){
        return prefix + "Mrs Kelis  Hobi Melet";
    }
@Override
public String gabung(){
return "Mrs.Kelis";
}
}
class ConcreteClass2 extends AbstractClass{
    @Override
    public String getValue(){
        return "Kelis";
    }
// Dilraj Putra 6701151059 D3MI3904 Kelompok 6
    
    @Override
    public String prefixValue (String prefix){
        return prefix + "Mrs Kelis  Hobi Melet";
    }
@Override
public String gabung(){
return "Mrs.Kelis";
}
}
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_"));
    }
}

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

Jawab :

Tidak boleh , dan hasilnya pun jadi error karena method abstract tersendiri adalah method yang tidak memiliki body method ,jadi tidak terbentuk objek atau pernyataan, juga menunjukan  dan akan dioverride dikelas anak nya(class child).
2. Kembalikan program seperti semula, jelaskan error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di hapus! 

Jawab:

Hasil error , karena class ConcreteClass1 itu meng-extends class AbsctractClass yang merupakan kelas abstrak yang mempunyai abstrak method untuk di override di kelas anaknya, tetapi jika tidak dioverride maka method akan null , jadi hasil compilenya error seperti diatas.

3. Kembalikan program seperti semula, selanjutnya perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1 dan ConcreteClass2! Jelaskan apa maksudnya! 
Jawab :
Pada ConcreteClass1 hak akses bersifat protected,
Protected berarti method hanya dapat diakses kelas ini dan kelas turunannya saja, atau kelas lain dalam 1 package.
Pada ConcreteClass2 hak akses bersifat public,

Public berarti method dapat diakses kelas kelas lain juga, public juga sebagai default hak akses.
4. Buatlah abstract method yang bernama getValue2 pada class ConcreteClass1! Compile dan mengapa terjadi error?

Jawab :


Terjadi error karena, ConcreteClass1 bukan kelas abstrak dan meng-extends kelas AbstracClass yang kelas abstrak , jadi tidak bisa mempunyai method abstrak seperti getValue2().
5. Ikuti soal nomor 4, silahkan ubah class ConcreteClass1 menjadi abstract. Selajutnya jelaskan mengapa terjadi error?

Jawab :

Karena , walaupun ConcreteClass1 sudah menjadi kelas abstrak dan dapat dibuat method abstrak getValue2() nya, tetapi ConcreteClass1 tidak dapat dijadikan sebuah objek dikelas Main, karena itulah maka error terjadi, karena Kelas Abstrak tidak dapat diinstansiasikan menjadi objek.


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

 :


Pengamatan Interface :
Soal:
interface Mobil{
    public void setMerk(String merk);
    public String getMerk();
}
interface Mesin extends Mobil{
    public void setNoMesin(String nomMesin);
    public String getNoMesin();
}
class Mobil1 implements Mesin {
    private String merk, noMesin;
 
    @Override
    public void setMerk(String merk){
        this.merk = merk;
    }

    @Override
    public void setNoMesin(String noMesin) {
        this.noMesin = noMesin;
    }

    @Override
    public String getNoMesin() {
        return noMesin;
    }

    @Override
    public String getMerk() {
        return merk;
    }
}
class Mobil2 implements Mesin {
    private String merk, noMesin;
 
    @Override
    public void setNoMesin(String noMesin) {
        this.noMesin = noMesin;
    }

    @Override
    public String getNoMesin() {
        return noMesin;
    }

    @Override
    public void setMerk(String merk) {
        this.merk = merk;
    }

    @Override
    public String getMerk() {
        return merk;
    }
}
public class Main {
   public static void main (String [] args){
       Mobil1 m1 = new Mobil1();
       m1.setMerk("Ferrari");
       m1.setNoMesin("09999");
       System.out.println(m1.getMerk());
       System.out.println(m1.getNoMesin());

  Mobil2 m2 = new Mobil2();
       m2.setMerk("Lamborghini");
       m2.setNoMesin("90467827");
       System.out.println(m2.getMerk());
       System.out.println(m2.getNoMesin());
   }
}
1.       Compile kode program dan jelaskan sebab error yang terjadi!


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




 Perhatikan soal 1 (abstract class) dan soal 2 ini (interface) dan lakukan poin-poin berikut:
 - Apa yang terjadi apabila ditambahkan method biasa yang mengandung body "{}" pada interface Mobil? Jelaskan!
> Hasilnya akan error karena, pada inheritance hanya dapat memuat abstract method yang tidak mempunyai body methodnya.

-Jelaskan perbedaan body program Antara class abstact dan interface!
> Pada  inheritance tidak ada atribut sdangkan pada abstract class terdapat
atribut.

- Jelaskan peprbedaan penggunaan extnds Antara soal1 dan soal2?
> Pada soal2(inheritance) extends dignakan untuk menambah abstract method, pada Soal1(Abstract) extends digunakan untuk mengoverri abstract method.

Nahh gimana ni sobat koding, udah mengerti ya tentang perbedaan kelas abstrak dan inheritance...
yaa ngertiin aja yak sob....

Terima Kasih!

3 comments:

  1. Lanjutkan Gan , info bermanfaat!

    ReplyDelete
    Replies
    1. MANTEP BNGT GAN, UNTUNG ADA INFO INI BERMANFAAT BNGT, CUSSSSSSS!!! DAH

      Delete
  2. Ini sangat tidak bermanfaat bagi saya gan. mohon di koreksi lagi :)))))))))))))))))))))))))))))))))))))

    ReplyDelete