BAB 5
Interface , Innerclass , Abstrak
Teori Singkat Kelas Inner
Dimana
programmer membolehkan untuk 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).
Contoh Program dasar pada
Innerclass :
Program InnerClass
pada c# .
using System;
using inner;
namespace inner
{
class
kelaspendaftaran
// sebagai kelas luar
{
public class kelasmusik // sebagai
kelas dalam
{
public void piano()
{
Console.WriteLine("Selamat datang di
belajar musik bersama");
Console.WriteLine("=======<> R
I Z K I <> PIANIS <>=======");
Console.WriteLine("=======<> B
A N Y U W A N G I <>=======");
}
}
}
class Program
{
static void Main(string[] args)
{
kelaspendaftaran.kelasmusik d = new kelaspendaftaran.kelasmusik();
d.piano();
Console.ReadKey(true);
}
}
}
Program InnerClass pada
C++ .
#include <iostream>
#include <cstdlib>
#include <iostream>
using namespace std;
class kelaspendaftaran // sebagai kelas luar
{
public : class kelasmusik //
sebagai kelas dalam
{
public : void piano()
{
cout <<
"Selamat datang di belajar musik bersama" << endl;
cout <<
"=======<> R I Z K I <> PIANIS <>=======" <<
endl;
cout <<
"=======<> B A N Y U W A N G I <>=======" << endl;
}
};
};
int main(void) {
kelaspendaftaran::kelasmusik
d = kelaspendaftaran::kelasmusik();
d.piano();
system("PAUSE");
}
Program InnerClass pada
Java .
package inner;
class kelaspendaftaraan //sebagai kelasLuar
{
class kelaspiano //sebagai kelasDalam
{
void piano(){
System.out.println("Selamat datang di belajar musik bersama");
System.out.println("=======<> R I Z K I <> PIANIS
<>=======");
System.out.println("=======<> B A N Y U W A N G I
<>=======");
}
}
}
public class Main {
public static void
main(String[] args) {
kelaspendaftaraan.kelaspiano
d = new kelaspendaftaraan().new kelaspiano();
d.piano();
}
}
Teori Singkat
Abstrak
Abstrak secara umum dapat kita artikan sebagai gambaran
tentang sesuatu hal namun belum begitu jelas gambarannya. Sehingga masih butuh
suatu proses lagi supaya gambaran tentang sesuatu tersebut menjadi lebih
jelas(konkrit). kelas Abstrak tidak berbeda dengan kelas-kelas lainnya yaitu
memiliki class members (method dan variabel). Sebuah class adalah abstrak jika
salah satu methodnya dideklarasikan abstract. Method abstrak adalah
method yang ditentukan dari dalam kelas tapi tidak disertai definisinya .
Beberapa hal yang perlu diperhatikan adalah sebagai berikut:
·
Class abstrak tidak dapat dibuatkan instant atau
objeknya menggunakan keyword new.
·
Sebuah class dapat dideklarasikan sebagai class
abstrak walaupun tidak memiliki method abstrak.
Definisi kelas diletakkan pada masing – masing kelas
turunan (subclass). Dalam hal ini setiap subclass dari kelas abstrak harus
mendefinisikan method-method yang tergolong sebagai method abstrak. Untuk
membuat kelas abstrak digunakan key word abstract dengan cara penulisan seperti
berikut:
abstract public <nama
method>{
//variabel
instant
//method non
abstrak
//method
abstrak
}
Contoh dari kelas abstrak adalah obyek bangun 2 dimensi
(2D). Semua obyek bangun 2D dapat dihitung luas dan kelilingnya, tapi karena
rumus untuk mendapatkan luas dan kelilingnya berbeda-beda untuk tiap – tiap
bangun 2D maka method untuk menghitung luas dan keliling dibuat sebagai
abstrak. Pada subclass – subclassnya baru akan diimplementasikan secara detail
disertai penulisan rumus untuk masing – masing bangun 2D.
Program Abstrak pada
Java .
package abstrack;
public class Main
{
static Implementasi abstrak =
new Implementasi();
public static void
main(String[] args)
{
String music1 = "Cara Bermain Musik Gitar : ";
String music2 =
"Cara Bermain Musik Piano: ";
String cara1 =
"Dipetik e,a,d,g,b,e";
String cara2 =
"Dipencet do,re,mi,fa,so,la,si,do";
abstrak.ShowDta(music1,cara1);
abstrak.ShowDta2(music2,cara2);
}
}
abstract class A //Abstrak Class
{
public abstract void
ShowDta(String music1,String cara1); // Abstrak method
public void ShowDta2(String
music2,String cara2)
{
System.out.println("----Alat Musik Piano----");
System.out.println();
System.out.println("Jenis
musik :"+music2);
System.out.println("Cara
dan nada :"+cara2);
}
}
class Implementasi extends A
{
public void ShowDta(String
music1, String cara1)
{
System.out.println("----Alat Musik Gitar----");
System.out.println();
System.out.println("Jenis
Musik :"+music1);
System.out.println("Cara
dan Nada :"+cara1);
System.out.println();
}
}
Program Abstrak pada
C-Sharp .
namespace abstrak
{
class Program
{
static Implementasi abstrak = new Implementasi();
public static void Main(string[] args)
{
string music1 = "Cara Bermain Musik Gitar :";
string music2 = "Cara Bermain Musik Piano :";
string cara1 = "Dipetik e,a,d,g,b,e";
string cara2 = "Dipencet do,re,mi,fa,so,la,si,do";
abstrak.ShowDta(music1,cara1);
abstrak.ShowDta2(music2,cara2);
Console.Write("\nPress any key
to continue . . . ");
Console.ReadKey(true);
}
}
abstract class A //Abstrak Class
{
public abstract void ShowDta(string music1,string cara1); // Abstrak method
public void ShowDta2(string music2,string cara2)
{
Console.WriteLine("----Alat Musik
Piano----");
Console.WriteLine();
Console.WriteLine("Jenis musik : {0}",music2);
Console.WriteLine("Cara dan
nada :
{0}",cara2);
}
}
class Implementasi : A
{
public override void ShowDta(string music1, string cara1)
{
Console.WriteLine("----Alat Musik
Gitar----");
Console.WriteLine();
Console.WriteLine("Jenis Musik : {0}",music1);
Console.WriteLine("Cara dan
nada : {0}",cara1);
Console.WriteLine();
}
}
}
Program Abstrak pada
Java .
#include <cstdlib>
#include <iostream>
using namespace std;
class A
{
public : virtual void
ShowDta(string music1,string cara1) = 0; // ---> Abstrak method
public : void ShowDta2(string
music2,string cara2)
{
cout<<endl;
cout<<"----Alat
Musik Piano----"<<endl;
cout<<endl;
cout<<"Jenis
musik : "<<music2<<endl;
cout<<"Cara dan
nada :
"<<cara2<<endl;
}
};
class Implementasi : public A
{
public : void ShowDta(string
music1, string cara1)
{
cout<<"----Alat
Musik Gitar----"<<endl;
cout<<endl;
cout<<"Jenis
musik :
"<<music1<<endl;
cout<<"Cara dan
nada :
"<<cara1<<endl;
}
};
int main(int argc,char*argv[])
{
Implementasi abstrak;
string music1 = "Cara Bermain Musik Gitar :";
string music2 = "Cara Bermain Musik Piano :";
string cara1 = "Dipetik e,a,d,g,b,e";
string cara2 = "Dipencet
do,re,mi,fa,so,la,si,do";
abstrak.ShowDta(music1,cara1);
abstrak.ShowDta2(music2,cara2);
}