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
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 public, static 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.
- 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.
·
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";
}
}
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 :
2.
Kembalikan program seperti semula, jelaskan error apa yang terjadi apabila
method getValue() pada class ConcreteClass1 di hapus!
Jawab:
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.
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.
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.
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?
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());
}
}
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!
Lanjutkan Gan , info bermanfaat!
ReplyDeleteMANTEP BNGT GAN, UNTUNG ADA INFO INI BERMANFAAT BNGT, CUSSSSSSS!!! DAH
DeleteIni sangat tidak bermanfaat bagi saya gan. mohon di koreksi lagi :)))))))))))))))))))))))))))))))))))))
ReplyDelete