Jelaskan perbedaan abstract class interface dan inner Class

KELAS INNER, KELAS ABSTRACT, DAN INTERFACE

INNER KELAS Class yang dideklarasikan di dalam class Outer class class X { [modifier akses ] class Y {. Inner class Menghasilkan dua file *.class, yaitu Outer.class dan Outer$Inner.class X.class X$Y.class

Inner kelas Inner class merupakan bagian dari kelas, maka diperlakukan seperti member class lainnya Inner dapat mengakses semua member dari outer class, begitu juga sebaliknya Inner class digunakan selayaknya class normal, tapi inner class ini dapat digunakan di luar outer classnya tergantung modifier aksesnya.

Contoh Inner kelas class Buku { private int nomor; private String judul; class Bab { private int nobab; public String getbab() { return "nomor buku: "+nomor+", judul buku: "+judul +", nomor Bab: "+nobab; private Bab bab = new Bab(); public void setbab(int nomor,string judul,int nobab ) { this.nomor = nomor; this.judul = judul; bab.nobab = nobab; public void cetak(){ System.out.println(bab.getBab());

Contoh Inner kelas class DemoBuku { public static void main(string[] args) { Buku buku = new Buku(); buku.setbab(10, PBO 1,6) buku.cetak();

ABSTRACT CLASS Suatu kelas yang dinyatakan abstract yang umumnya memiliki satu atau lebih abstract method Abstract method adalah suatu method yang belum memiliki implementasi dan menggunakan modifier abstract. Abstract class biasanya dijadikan parent atau super class dari kelas-kelas yang dapat membuat object. (tidak dapat membuat object dari abstrak class)

Analogi Kelas yang Abstract Suatu kelas dapat diinstansiasi menjadi objek, misal kelas Dosen dapat diinstansiasi menjadi wilis, bayu, lina, namun tidak mungkin dapat menginstansiasi kelas MahlukHidup, kelas Hewan, dan kelas Manusia, sebab kelas tersebut terlalu umum (abstract), kelas seperti inilah yang disebut kelas abstract. Dibutuhkan kelas turunan yang lebih khusus. Dosen wilis MakhlukHidup Hewan bayu lina

Analogi Method yang Abstract Bila kelas MahlukHidup mempunyai method bernafas, maka tidak dapat ditentukan cara suatu mahluk hidup tersebut bernafas (dengan paru-paru, insang, atau stomata), method seperti inilah yang disebut method abstract. Dibutuhkan kelas turunan yang khusus dan method override dari method yang abstract

Contoh Abstract Class abstract class A { abstract public void method2(); //method konkrit yg memiliki implementasi public void method1() { System.out.println( Method konkrit dari class A ); class B extends A { public void method2() { System.out.println( Method abstrak yang sudah menjadi konkrit dalam class B ); class DemoAbstrak { public static void main(string[] args) { B ob = new B(); ob.method1(); ob.method2();

INTERFACE kelas yang berisi method-method tanpa implementasi, namun tanpa modifier abstract, apabila suatu interface memiliki atribut, maka atributnya akan berlaku sebagai konstanta (static final).

Analogi Interface Interface dapat dianalogikan sebagai kontrak yang dapat dipakai oleh setiap kelas. Dengan demikian untuk membuat objek seorang budi bekerja sebagai dosen, harus dibuat kelas yang merupakan turunan kelas manusia yang mengimplementasikan interface dosen.

Deklarasi Interface Bentuk umum deklarasi: [modifier] interface NamaInterface { // deklarasi konstanta // deklarasi method Catatan : modifier static tidak boleh digunakan dalam interface

Implementasi Interface Bentuk umum implementasi : [modifier] class NamaKelas implements NamaInterface { // penggunaan konstanta // implementasi method

Interface vs Class komponen interface class definisi kandungan informasi daftar deklarasi method isi/implementasi semua methodnya berada di luar interface ini instansiasi tidak boleh boleh model objek mendefinisikan attribute dan method secara rinci dan konkret

Interface vs Inheritance Inheritance adalah proses pewarisan attribute dan method dari satu kelas super kepada satu/lebih subkelas. Syntax kelas yang menggunakan lebih dari satu interface : [modifier] class NamaKelas implements NamaInterface1, NamaInterface2, { //interfacebody

Interface vs Abstract Class komponen interface abstract class attribute hanya berupa konstanta bebas memilki tipe data apa saja method berupa deklarasi boleh deklarasi, boleh berupa method lengkap syntax seluruhnya abstract (berupa deklarasi) sebagian abstract

Contoh Interface interface Queue { public void push(int e); public int pop(); public void printq();

public class Fifo implements Queue { int bucket[]; int max; int head; public Fifo() { bucket = new int[10]; max = 10; head = -1; public Fifo(int size) { bucket = new int[size]; max = size; head = -1; public void push(int e) { if ( head == max - 1) { System.out.println("Queue sudah penuh!"); else { for (int i = head; i >= 0; i--) { bucket[i+1] = bucket[i]; bucket[0] = e; head++; System.out.println("Nilai " + e + " dimasukkan ke queue");

public class Lifo implements Queue { int bucket[]; int max; int head; public Lifo() { bucket = new int[10]; max = 10; head = -1; public Lifo(int size) { bucket = new int[size]; max = size; head = -1; public void push(int e) { if (head == max - 1) { System.out.println("Queue sudah penuh!"); else { bucket[++head] = e; System.out.println("Nilai " + e + " dimasukkan ke queue"); public int pop() { if (head == -1) { System.out.println("Queue sudah kosong!"); return -1; else { return bucket[head--]; public void printq() { System.out.print("Isi queue: "); for (int i = 0; i <= head; i++) { System.out.print(bucket[i] + " "); System.out.println();

public class TestFifo { public static void main(string argv[]) { Fifo q = new Fifo(4); q.printq(); q.push(1); q.printq(); q.push(1); q.push(2); q.push(2); q.push(3); q.push(4); q.push(5); q.printq(); System.out.println(q.pop()); System.out.println(q.pop()); System.out.println(q.pop() ); q.push(3); q.printq(); System.out.println(q.pop()); System.out.println(q.pop()); System.out.println(q.pop());

public class TestLifo { public static void main(string argv[]) { System.out.println(q.pop()); System.out.println(q.pop()); Lifo q = new Lifo(4); q.printq(); q.push(1); System.out.println(q.pop()); System.out.println(q.pop()); System.out.println(q.pop()); q.printq(); q.push(2); q.push(3); q.push(4); q.push(1); q.push(2); System.out.println(q.pop()); q.push(3); q.push(5); q.printq(); q.printq();

Contoh lain: Abstract Class Hewan.java abstract class Hewan { protected String nama; protected int jumkaki; protected boolean bisaterbang = false; public Hewan(String nama, int kaki, boolean terbang) { this.nama = nama; jumkaki = kaki; bisaterbang = terbang; public abstract void bersuara(); public static void makan() { System.out.println("nyam, nyam, nyam"); public void ishewan() { System.out.println("nama : "+nama); System.out.println("jumlah kaki : "+jumkaki); System.out.println("bisa terbang : "+bisaterbang);

Perkutut.java class Perkutut extends Hewan { public Perkutut() { super("perkutut",2,true); public void bersuara() { System.out.println("\ncuit, cuit, cuit"); public static void main(string[] args) { Perkutut p = new Perkutut(); p.ishewan(); p.bersuara(); Output :

Sapi.java class Sapi extends Hewan { public Sapi() { super("sapi", 4, false); public void bersuara() { System.out.println("\nemoh,emoh.."); public static void main(string[] args) { Sapi s = new Sapi(); s.ishewan(); s.bersuara(); Output :

Contoh lain: Interface Manusia.java interface Manusia { public void menyanyi(); public void ketawa(); SpongeBob.java class SpongeBob extends Hewan implements Manusia { public SpongeBob() { super("sponge bob", 2, false); public void bersuara() { System.out.println("\nhallo patrict.."); public void menyanyi() { System.out.println("nye, nye, nye, wik, wik, wik"); public void ketawa() { System.out.println("kek, kek, kek"); public static void makan() { System.out.println("uenak tenan.."); public void makan2() { super.makan();

Lanjutan SpongeBob.java public static void main(string[] args) { SpongeBob s= new SpongeBob(); s.ishewan(); s.bersuara(); s.menyanyi(); s.ketawa(); s.makan2(); Hewan.makan(); makan(); Output :

1. Kelas Inner

Java membolehkan programmer mnyisipkan suatu kelas ke dalam kelas lainnya. Kelas sisipan ini disebut kelas Inner.

Kelas Inner berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas luarnya.

Beberpa ketentuan kelas Inner :

a) Kelas Luar yang mengandung kelas Inner, bila dikompilasi akan menghasilkan dua file *.class, yaitu Luar.class dan Luar$Inner.class

b) Kelas Inner boleh tidak diberi nama, yang disebut Anonymous Inner. c) Kelas Inner dapat diberi modifier akses public, atau protected, atau

default, ataupun private.

d) Untuk mengakses referensi this dari kelas luar digunakan bentuk NamaKelasLuar.this.

e) Kelas Luar ikut bertanggung-jawab dalam instansiasi kelas Inner (yang non static) . Kalau objek kelas Luar adalah a, dan objek kelas Inner adalah b, maka sintaks yang benar adalah :

Luar a = new Luar();

Luar.Inner b = a.new Inner();

f) Jika kelas Inner bersifat static, maka objek milik kelas Inner dapat dibuat sendiri tanpa melalui kelas Luarnya, (Artinya kelas Inner tidak dapat mengakses attribute ataupun method non static milik kelas Luarnya). 2. Menggunakan Kelas Inner

Kelas Inner lazim digunakan untuk membuat handler di method main() pada suatu aplikasi GUI.

Handler merupakan bagian program yang akan memproses event-event yang dipicu ketika user berinteraksi dengan komponen-komponen GUI.

Contoh program berikut adalah aplikasi Button sederhana dengan handlernya dari kelas Inner :

DemoJButtonInner.java import java.awt.*;

import java.awt.event.*; import javax.swing.*;

public class DemoJButtonInner extends JFrame { private JButton btn;

public DemoJButtonInner (){

super("Demo JButton Inner Class"); Container c = getContentPane(); c.setLayout(new FlowLayout()); btn = new JButton("Button"); c.add(btn);

// membuat event handler

ButtonHandler handler = new ButtonHandler(); btn.addActionListener(handler);

setSize(275, 100); show();

}

public static void main(String args[]) {

DemoJButtonInner app = new DemoJButtonInner(); app.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0);

} }); }

// kelas Inner untuk Event Handling pada button

private class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent ae) { JOptionPane.showMessageDialog(null,

"anda telah menekan"

+ae.getActionCommand()+"\n"

+"Handler button ini pakai kelas Inner"); }

} } Output :

3.1. Analogi Kelas yang Abstract

Suatu kelas dapat diinstansiasi menjadi objek, misal kelas Dosen dapat diinstansiasi menjadi budi, heri, heru, namun tidak mungkin dapat menginstansiasi kelas MahlukHidup, kelas Hewan, dan kelas Manusia, sebab kelas tersebut terlalu umum (abstract), kelas seperti inilah yang disebut kelas abstract. Dibutuhkan kelas turunan yang lebih khusus.

3.2. Analogi Method yang Abstract

Bila kelas MahlukHidup mempunyai method bernafas, maka tidak dapat ditentukan cara suatu mahluk hidup tersebut bernafas (dengan paru-paru, insang, atau stomata), method seperti inilah yang disebut method abstract. Dibutuhkan kelas turunan yang khusus dan method override dari method yang abstract.

4. Interface

Interface adalah kelas yang paling abstract, yang berisi daftar deklarasi method (seluruh method belum memiliki implementasi).

4.1. Analogi Interface

Interface dapat dianalogikan sebagai kontrak/profesi/peran yang dipakai oleh setiap kelas.

Dalam kehidupan nyata dapat diketahui ada manusia yang bekerja sebagai da’i, dosen, tentara, penyanyi, pengacara, dan sebagainya, tentunya manusia-manusia tersebut selain harus memiliki method standard sebagai seorang manusia, juga harus memiliki method yang sesuai dengan pekerjaannya.

Dengan demikian untuk membuat objek seorang budi bekerja sebagai dosen, harus dibuat kelas yang merupakan turunan kelas manusia yang meng-implementasikan interface dosen.

5. Deklarasi Interface

Bentuk umum deklarasi:

[modifier] interface NamaInterface { // deklarasi konstanta

// deklarasi method }

Catatan : modifier static tidak boleh digunakan dalam interface

6. Implementasi Interface

Bentuk umum implementasi :

[modifier] class NamaKelas implements NamaInterface { // penggunaan konstanta

// implementasi method }

7. Contoh Abstract Class dan Interface

Hewan.java

abstract class Hewan { protected String nama;

jumKaki = kaki;

bisaTerbang = terbang; }

public abstract void bersuara(); public static void makan() {

System.out.println("nyam, nyam, nyam"); }

public void isHewan() {

System.out.println("nama : "+nama);

System.out.println("jumlah kaki : "+jumKaki); System.out.println("bisa terbang : "+bisaTerbang); }

}

Manusia.java

Interface Manusia {

public void menyanyi(); public void ketawa(); }

Perkutut.java

class Perkutut extends Hewan { public Perkutut() {

super("perkutut",2,true); }

public void bersuara() {

System.out.println("\ncuit, cuit, cuit"); }

public static void main(String[] args) { Perkutut p = new Perkutut();

p.isHewan(); p.bersuara(); }

}

Sapi.java

class Sapi extends Hewan { public Sapi() {

super("sapi", 4, false); }

public void bersuara() {

System.out.println("\nemoh…,emoh.."); }

public static void main(String[] args) { Sapi s = new Sapi();

s.isHewan(); s.bersuara(); } } Outputnya adalah : SpongeBob.java

class SpongeBob extends Hewan implements Manusia { public SpongeBob() {

super("sponge bob", 2, false); }

public void bersuara() {

System.out.println("\nhallo patrict.."); }

public void menyanyi() {

System.out.println("nye, nye, nye, wik, wik, wik"); }

public void ketawa() {

System.out.println("kek, kek, kek"); }

public static void makan() {

System.out.println("uenak tenan.."); }

s.bersuara(); s.menyanyi(); s.ketawa(); s.makan2(); Hewan.makan(); makan(); } } Outputnya adalah : 8. Interface vs Class

Perbandingan interface dengan class :

komponen interface class

definisi daftar deklarasi method model objek kandungan

informasi

isi/implementasi semua methodnya berada di luar

interface ini

mendefinisikan attribute dan method secara rinci dan konkret

instansiasi tidak boleh boleh

9. Interface vs Inheritance

Inheritance adalah proses pewarisan attribute dan method dari satu kelas super kepada satu/lebih subkelas.

Bagaimana kalau dibutuhkan suatu kelas yang attribute dan methodnya berasal dari lebih dari satu kelas super ? disinilah keterbatasan inheritance, namun interface

berperan, karena dalam interface bisa dimasukkan method-method dari beberapa library referensi tanpa harus menurunkannya.

Syntax kelas yang menggunakan lebih dari satu interface :

[modifier] class NamaKelas implements NamaInterface1, NamaInterface2, … {

//interfaceBody }

Nama-nama interface tersebut dapat dijadikan tipe data attribute ataupun tipe data parameter dalam kelas yang menggunakan.

10. Interface vs Abstract Class

Interface dan kelas abstract memilki kesamaan sama-sama tidak boleh instansiasi objek.

Perbedaan interface dangan kelas abstract adalah sebagai berikut :

Komponen interface abstract class

Attribute hanya berupa konstanta bebas memilki tipe data apa saja

Method berupa deklarasi boleh deklarasi, boleh berupa method lengkap

Syntax seluruhnya abstract (berupa deklarasi)

Boleh sebagian yg diimplementasikan

sebagian abstract

Method yg abstrak harus semua diimplementasikan subclassnya

11. Aplikasi Interface

import java.awt.*;

import java.awt.event.*; import javax.swing.*;

public class AppJButton extends JFrame implements ActionListener { private JButton btn;

public AppJButton() { // constructor super("Demo JButton Interface"); Container c = getContentPane(); c.setLayout(new FlowLayout()); btn = new JButton("Button"); c.add(btn); btn.addActionListener(this); setSize(275, 100); show(); }

public static void main(String args[]) { AppJButton app = new AppJButton();

app.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0);

} }); }

public void actionPerformed(ActionEvent ae) {

JOptionPane.showMessageDialog(null,"Anda telah menekan: "+ae.getActionCommand()+"\n"+

"Handler Button ini mengimplementasikan interface"); }

}

Outputnya :

D. Rangkuman

Inner kelas adalah satu atau beberapa kelas yang disisipkan pada kelas lainnya yang berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas luarnya. Ada beberapa bentuk inner kelas seperti yang telah disebutkan sebelumnya.

Abstract class adalah suatu kelas yang dinyatakan abstract yang umumnya memiliki satu atau lebih abastract method. Abstract method adalah suatu method yang belum memiliki implementasi dan menggunakan modifier abstract. Abstract class biasanya dijadikan parent atau super class dari kelas-kelas yang dapat membuat object.

Sedangkan interface adalah kelas yang berisi method-method tanpa implementasi, namun tanpa modifier abstract, apabila suatu interface memiliki atribut, maka atributnya akan berlaku sebagai konstanta (static final).

E. Soal Latihan

1. Dengan menggunakan konsep inner class, buatlah program yang memunculkan sebuah frame induk yang memiliki sebuah button sebagai elemen, yang jika tombol tersebut ditekan akan muncul frame anak yang memuat gambar di dalam frame induk seperti contoh berikut :

Burung

Superman

BAB VII

Video yang berhubungan

Postingan terbaru

LIHAT SEMUA