KELAS INNER, KELAS ABSTRACT, DAN INTERFACE

  

ABSTRACT, DAN INTERFACE

INNER KELAS

  

Class yang dideklarasikan di dalam class

class X { …

  Outer class

  modifer akses ]

  [ class Y { ….

  Inner class } …

  } 

  Menghasilkan dua fle *.class, yaitu

  

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

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

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 modifer abstract .

  

Abstract class biasanya dijadikan parent

atau super class dari kelas-kelas yang

  

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

  MakhlukHidup Hewan wilis Dosen

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

  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) {

  

INTERFACE

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

  

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 meng-implementasikan

Deklarasi Interface

  Bentuk umum deklarasi: [modifer] interface NamaInterface { // deklarasi konstanta // deklarasi method } Catatan : modifer static tidak boleh digunakan dalam interface

Implementasi Interface

Bentuk umum implementasi :

  [modifer] class NamaKelas implements NamaInterface { // penggunaan konstanta // implementasi method }

Interface vs 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

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 :

  [modifer] 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(); } 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

  public class Fifo implements Queue {

  • " dimasukkan ke queue"); } }
int bucket[]; int max; public int pop() { int head; if (head == -1) { public Lifo() {

  System.out.println("Queue sudah bucket = new int[10]; kosong!"); max = 10; return -1; head = -1; }

  } public Lifo(int size) { else { bucket = new int[size]; return bucket[head--]; max = size;

  } head = -1;

  } } public void push(int e) { if (head == max - 1) { public void printQ() { System.out.println("Queue sudah

  System.out.print("Isi queue: "); penuh!"); for (int i = 0; i <= head; i++) {

  } System.out.print(bucket[i] + " "); else {

  } bucket[++head] = e; System.out.println("Nilai " + e + " System.out.println();

  public class TestFifo {

  public static void main(String

  q.printQ();

  argv[]) {

  q.push(1);

  Fifo q = new Fifo(4); q.printQ();

  q.push(2);

  q.push(1);

  System.out.println(q.pop());

  q.push(2);

  q.push(3);

  q.push(3);

  q.printQ();

  q.push(4);

  }

  q.push(5);

  }

  q.printQ(); System.out.println(q.pop()); System.out.println(q.pop()); System.out.println(q.pop()); System.out.println(q.pop());

  public class TestLifo { public static void main(String argv[]) { Lifo q = new Lifo(4); q.printQ(); q.push(1); 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()); System.out.println(q.pop()); System.out.println(q.pop()); q.printQ(); q.push(1); q.push(2); System.out.println(q.pop()); q.push(3); 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() {

  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 :

  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() { public static void main(String[] args) { SpongeBob s= new SpongeBob(); s.isHewan(); s.bersuara(); s.menyanyi(); s.ketawa(); s.makan2(); Hewan.makan(); makan(); } }

  Output :