"Halo, Amigo! Kita duwe topik anyar sing menarik."

"Dina iki mung dina topik sing menarik!"

“Ngene, matur nuwun!”

"Sampeyan bisa."

"Elinga nalika kita ngenalake kelas dasar ChessItem kanggo nyederhanakake kabeh kelas kanggo potongan catur?"

"Ya."

"Saiki mbayangno sing saben Piece wis cara sing nangani Rendering Piece ing layar. Sampeyan nelpon cara lan Piece ndudohke dhewe ing koordinat saiki. Apa bakal mbiyantu kanggo mindhah cara iki menyang kelas basa?"

"Ya." Sawise aku sinau babagan polimorfisme, aku bakal bisa nelpon metode render kanggo kabeh potongan, preduli saka jinise. Mergo opo iki :"

Tuladhane:
class ChessBoard
{
  public void drawAllChessItems()
  {
  //draw them regardless of their type.
  ArrayList <ChessItem> items = new ArrayList<ChessItem>();
  items.add(new King());
  items.add(new Queen());
  items.add(new Bishop());

  //draw them regardless of their type.
  for (ChessItem item: items)
  {
   item.draw();
  }
 }
}

"Inggih rampung. Persis. Lan apa sing bakal ditindakake kanthi cara nggambar kelas ChessItem dhewe?"

"Aku ora ngerti. Catur ora duwe potongan kaya ngono. Lan tegese ora ana perwakilan visual."

"Satemene. Lan ora ana gunane kanggo nggawe obyek ChessItem. Ora ana potongan catur kaya ngono. Iku mung abstraksi —kelas sing digawe kanggo penak. Mangkene cara abstraksi ing OOP: kita mindhah kabeh sing penting (dibagi dening kabeh potongan) data lan metode menyang kelas dhasar , nanging kita tetep beda ing kelas sing cocog karo potongan catur tartamtu."

Jawa nduweni jinis kelas khusus kanggo iki: kelas abstrak . Mangkene telung perkara sing kudu dielingi babagan kelas abstrak.

1) Kelas abstrak bisa ngumumake metode tanpa ngetrapake. Cara kang kaya mangkono diarani metode abstrak.

Tuladhane:
 public abstract class ChessItem
{
 public int x, y; //coordinates
 private int value; //the piece's "value"

 public int getValue() //an ordinary method, returns value
 {
   return value;
 }

 public abstract void draw(); //abstract method. There is no implementation.

}

2) Metode abstrak ditandhani nganggo tembung kunci abstrak .

Yen kelas duwe siji metode abstrak, banjur kelas kasebut uga ditandhani karo abstrak .

3) Sampeyan ora bisa nggawe obyek saka kelas abstrak. Kode sing nyoba nglakoni mung ora bakal dikompilasi.

kode Jawa Katrangan
ChessItem item = new ChessItem();
item.draw();
Kode iki ora bakal dikompilasi.
ChessItem item = new Queen();
item.draw();
Nanging sampeyan bisa nindakake iki.

4) Yen kelas sampeyan entuk kelas abstrak, sampeyan kudu ngilangi kabeh metode abstrak sing diwarisake, yaiku sampeyan kudu ngetrapake. Yen ora, kelas sampeyan uga kudu diumumake abstrak. Yen kelas kasebut duwe siji metode sing ora ditindakake sing diumumake langsung ing kelas utawa diwarisake saka kelas induk, mula kelas kasebut dianggep abstrak.

"Nanging kenapa kabeh iki perlu? Apa kita kudu kelas abstrak? Apa ora bisa nggunakake kelas biasa tinimbang? Lan tinimbang cara abstrak, kita ora bisa mung nggawe implementasine kosong sing kalebu mbukak lan nutup kurung kriting?"

"Sampeyan bisa. Nanging watesan iki kaya privatemodifier. Kita nggunakake privatemodifier kanggo sengaja mblokir akses langsung menyang data, supaya programer liyane lan kelas nggunakake publiccara kita."

Padha ditrapake kanggo kelas abstrak. Sapa wae sing nulis kelas ora pengin sapa wae nggawe instance kelas. Kosok baline, panulis ngarepake metodhe abstrak kelas abstrakne bisa diwarisake lan ditimpa.

"Aku isih ora ngerti kenapa kita pengin nggawe rumit urip kanthi cara iki."

"Kauntungan saka fitur iki katon ing proyek-proyek gedhe. Sing luwih akeh kelas sing sampeyan duwe, luwih jelas sampeyan kudu nemtokake perane. Sampeyan bakal weruh kauntungan saka nindakake iki, lan rauh. Kabeh wong kudu ngliwati iki."