1. Abstact Class
Abstract class adalah suatu class yang dinyatakan abstract, umumnya memiliki satu atau 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 objek, abstract class tidak dapat diinstanisasi.
Analogi Inheritance dan Abstract Class :
Inheritence dapat dianalogikan seperti penggolongan kelas, ordo, phylum dalam biologi. Makhluk hidup dapat diturunkan atau diextend atau diperluas (di-inherit) menjadi burung, reptile, ikan dan lain – lain, jenjang penurunan tersebut disebut inheritance.
Kita mengetahui bahwa suatu kelas dapat diinstanisasi menjadi suatu objek, misal kelas manusia dapat diinstanisasi menjadi Joko, Susi, Ari, dan lain – lain, namun kita tidak mungkin dapat menginstanisasi kelas makhluk hidup, maupun kelas hewan, sebab kelas tersebut terlalu umum (abstract), kelas seperti inilah yang desebut sebagai abstract class, apabila class makhluk hidup mempunyai method bernafas, maka kita tidak dapat menentukan (meng-implementasikan) cara makhluk hidup tersebut bernafas, dengan paru – paru, insang atau stomata, dengan demikian kita dapat menyatakan bahwa di dalam kelas makhluk hidup, bernafas merupakan method yang abstract.
- Interface
Interface adalah suatu class yang berisi method – method tanpa imlementasi, namun tanpa modifier abstract, apabila suatu interface memiliki atribut, maka atributnya akan berlaku sebagai konstanta (static final).

Interface dapat dianaligikan sebagai kontrak yang dapat dipakai oleh setiap kelas. Dalam kehidupan nyata kita mengetahui bahwa ada yang bekerja sebagai penyayi, pengacara, pelawak, dsb, tentunya manusia –manusia tersebut selain harus memiliki method standar seorang manusia, juga harus memiliki method yang sesuai dengan pekerjaannya. Dengan demikian untuk membuat seorang objek Joko penyayi kita harus membuat kelas yang merupakan turunan kelas manusia yang mengimplementasikan interface penyayi.
- Inner Class
Inner Class adalah kelas yang disisipkan di dalam kelas yang lain. Fungsi kelas sisipan ini adalah mendukung suatu proses yang akan dijalankan oleh kelas utamanya. Inner Class bersifat tersarang terhadap kelas – kelas utamanya, seperti halnya blok penyeleksian (if, for) yang tersarang pada blok penyeleksian lainnya atau method yang tersarang pada method lainnya.

Inner Class dapat dianalogikan sebagi hubungan antara manusia dan paru – paru. Setipa manusia pasti bernafas dengan menggunakan paru – paru. Dalam hal ini berarti kinerja dari paru – paru turut mendukung/menetukan kinerja dari manusia. Dalam bahasa pemrograman berorientasi objek manusia dapat dikatakan sebagai outer class dan paru – paru sebagai inner class-nya.
Contoh Dalam Program Java.
Code Programnya:
MakhlukHidup.Java
abstract class MakhlukHidup { //membuat kelas abstrak dengan nama MakhlukHidup
protected boolean BisaTerbang = false; // mendeklarasikan atribut
protected String Nama; // mendeklarasikan atribut
protected int JlhKaki; // mendeklarasikan atribut
public MakhlukHidup(String Nama1, int JlhKaki1, boolean BisaTerbang1) { // mendeklarasikan method dengan parameter Nama1, JlhKaji1, BiasTerbang1
this.Nama = Nama1; // menyatakan bahwa nilai Nama = Nama1
this.JlhKaki = JlhKaki1; // menyatakan bahwa nilai JlhKaki = JlhKaki1
this.BisaTerbang = BisaTerbang1; // menyatakan bahwa nilai BisaTerbang = BisaTerbang1
}
abstract void bernafas(); // mendeklarasikan method abstract dengan nama bernafas
public void status() { // deklarasi method status
System.out.println("Nama : "+Nama); //mencetak nilai dari atribut Nama
System.out.println("Jumlah kaki : "+JlhKaki); //mencetak nilai dari atribut JlhKaki
System.out.println("Bisa terbang : "+BisaTerbang); // mencetak nilai dari atribut BisaTerbang
}
}
// Program diatas tidak dapat dirunkan karena tidak memiliki fungsi utama dan hanya dapat dicomfile
Manusia.Java
public class Manusia extends MakhlukHidup { // membuat class Manusia turunan dari class MakhlukHidup
Manusia(String Nama){ //Construktor dari class Manusia
super(Nama,2,false); //method super berisi nilai dari Nama,JlhKaki,BisaTerbang.
}
public void bernafas() { //deklarasi method bernafas
System.out.println( Nama+ " bernafas dengan menghiruo O2"); //mencetak nilai dari Nama ditambah kata ” bernafas dengan menghiruo O2”
}
public static void main(String[] args) { // fungsi utama
Manusia m = new Manusia("Sayuti"); // membuat objek pada class Manusia dengan nama m dan mengirimkan nilai ”Sayuti “ pada parameter Nama di method Manusia
m.status(); // memanggil dan mencetak isi dari method status pada class MakhlukHidup dan dengan parameter yang telah dikirimkan
m.bernafas(); //mencetak isi dari method bernafas
}
}
Out Put :
Tumbuhan.Java
public class Tumbuhan extends MakhlukHidup { //deklarasikan class Tumbuhan turunan dari kelas MakhlukHidup
Tumbuhan(String Nama){ //(Contruktor)deklarasi method Tumbuhan dengan parameter Nama
super(Nama,0,false); // method super ,mengirimkan nilai dari Nama,JlhKaki,BisaTerbang pada kelas MaklukHidup.
}
public void bernafas() { // mendeklarasikan method abstract dengan nama bernafas
System.out.println( Nama+ " bernafas dengan menghiruo CO2"); //mencetak nilai dari Nama ditambah kata ” bernafas dengan menghiruo CO2”
}
public static void main(String[] args) { // fungsi utama
Tumbuhan m = new Tumbuhan("Bayam"); // membuat objek pada class Tumbuhan dengan nama m dan mengirimkan nilai ”Bayam “ pada parameter Nama di method Tumbuhan
m.status(); //mencetak isi dari method status pada class MakhlukHidup berdasarkan parameter yang telah dikirimkan
m.bernafas();//mencetak isi dari method bernafas
}
}
Out Put :
Pekerjaan.Java
interface Pekerjaan { // mendeklarasikan interface Pekerjaan
public void namaPekerjaan(); // mendeklarasikan method namaPekerjaan
public void gaji();// mendeklarasikan method gaji.
}
// Program diatas adalah Interface jadi tidak dapat dirunkan
.
Sasya.Java
public class Sasya extends Manusia implements Pekerjaan { //mendeklarasikan class Sasya turunan dari class Manusia dan mengimplementasikan pada interface Pekerjaan.
public Sasya() { //Construktor Sasya
super("Sasya");// method super dengan parameter Sasya
}
public void namaPekerjaan() { // memanggil method namaPekerjaan pada interface Pekerjaan
System.out.println("Pekerjaan :Sekretaris"); // menjetak ("Pekerjaan :Sekretaris")
}
public void gaji() { // memanggil method gaji pada interface Pekerjaan
System.out.println("Gaji : Rp. 3.000.000"); // mencetak ("Gaji : Rp. 3.000.000")
}
public static void main(String[] args) { // Fungsi Utama
Sasya s=new Sasya(); //membuat objek dengan nama s pada class Sasya
s.status () ; //memanggil dan mencetak isi dari method status pada class MakhlukHidup berdasarkan parameter yang telah dikirimkan
s.bernafas(); //memanggil dan mencetak isi dari method bernafas pada class MakhlukHidup dengan parameter yang telah dikirimkan
s.namaPekerjaan() ; // mencetak isi dari method namaPekerjaan
s.gaji(); // mencetak isi dari method namaPekerjaan
}
}
Out Put :
JantungManusia.Java
class Orang { // membuat class dengan nama Orang pada class JantungManusia
private int jumlKaki =2; // atribut jumlKaki dengan nilai 2
public void dengarBunyiJantung() { // mendeklarasikan method dengarBunyiJantung
Jantung j=new Jantung(); //membuat objek baru dengan nama j pada method jantung
j.bunyiJantung(); // objek j dari method bunyijantung
}
public void tahanNafas() { //mendeklarasikan method tahanNafas
System.out.println("Jantung berhenti berdetak!"); //mencetak ("Jantung berhenti berdetak!")
}
//inner class
class Jantung { // membuta kelas baru dengan nama Jantung pada class JantungManusia
public void bunyiJantung() { //memanggil method bunyiJantung
System.out.println("deg...deg...deg.."); // mencetak ("deg...deg...deg..")
}
public void istirahat() { // method istirahat
System.out.println("Silahkan ke "+jumlKaki+" kaki."); // mencetak ("Silahkan ke "+jumlKaki+" kaki.")
tahanNafas(); // memanggil method tahanNafas
}
}
}
class JantungManusia { // merupakan class utama dengan nama JantungManusia
public static void main(String[] args){ //Fungsi Utama
Orang o = new Orang(); // membuta objek baru dengan nama o pada method Orang
Orang.Jantung p = o.new Jantung();// membuta objek baru dengan nama p pada method jantung pada class Orang.
o.dengarBunyiJantung(); // mencetak nilai dari method dengar BunyiJantung pada class Orang
p.istirahat(); // mencetak nilai dari method istirahat pada class Jantung
}
}
Out Put :