"Hello, Amigo! Mayroon kaming isang kaakit-akit na bagong paksa."

"Ngayon ay isang araw lamang ng mga kaakit-akit na paksa!"

"Bakit, salamat!"

"Walang anuman."

"Remember noong ipinakilala natin ang ChessItem base class para gawing simple ang lahat ng klase para sa chess pieces?"

"Oo."

"Ngayon isipin na ang bawat piraso ay may isang paraan na humahawak sa pag-render ng piraso sa screen. Tawagan mo ang pamamaraan at ang piraso ay gumuhit mismo sa kasalukuyang mga coordinate nito. Makakatulong ba na ilipat ang pamamaraang ito sa base class?"

"Oo." Pagkatapos kong matutunan ang tungkol sa polymorphism, matatawagan ko ang paraan ng pag-render para sa lahat ng mga piraso, anuman ang kanilang uri. Isang bagay na tulad nito:"

Halimbawa:
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();
  }
 }
}

"Well done. Exactly. And what would be done by the draw method of the ChessItem class itself?"

"I don't know. Walang ganyang piece ang chess. And that means wala itong visual representation."

"Talaga. At hindi makatuwirang gumawa ng isang bagay na ChessItem. Walang ganoong piraso ng chess. Isa lamang itong abstraction —isang klase na ginawa namin para sa kaginhawahan. Ganyan gumagana ang abstraction sa OOP: inilipat namin ang lahat ng mahalaga (ibinahagi sa pamamagitan ng lahat ng piraso) data at pamamaraan sa isang batayang klase , ngunit pinanatili namin ang kanilang mga pagkakaiba sa mga klase na tumutugma sa mga partikular na piraso ng chess."

Ang Java ay may espesyal na uri ng klase para dito: ang abstract class . Narito ang tatlong bagay na dapat tandaan tungkol sa mga abstract na klase.

1) Ang isang abstract na klase ay maaaring magdeklara ng mga pamamaraan nang hindi ipinapatupad ang mga ito. Ang ganitong pamamaraan ay tinatawag na abstract na pamamaraan.

Halimbawa:
 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) Ang isang abstract na pamamaraan ay minarkahan ng keyword abstract .

Kung ang isang klase ay may kahit isang abstract na pamamaraan, ang klase ay minarkahan din ng abstract .

3) Hindi ka maaaring lumikha ng mga bagay ng isang abstract na klase. Ang pagtatangka ng code na gawin ito ay hindi mag-compile.

Java code Paglalarawan
ChessItem item = new ChessItem();
item.draw();
Ang code na ito ay hindi mag-compile.
ChessItem item = new Queen();
item.draw();
Ngunit magagawa mo ito.

4) Kung ang iyong klase ay nagmamana ng abstract na klase, kailangan mong i-override ang lahat ng minanang abstract na pamamaraan, ibig sabihin, kailangan mong ipatupad ang mga ito. Kung hindi, ang iyong klase ay kailangan ding ideklarang abstract. Kung ang klase ay may kahit isang hindi naipatupad na pamamaraan na direktang ipinahayag sa klase o minana mula sa parent class, kung gayon ang klase ay itinuturing na abstract.

"Ngunit bakit kailangan ang lahat ng ito? Bakit kailangan natin ng mga abstract na klase? Hindi ba posible na gumamit ng mga ordinaryong klase sa halip? At sa halip na mga abstract na pamamaraan, hindi ba tayo maaaring lumikha na lamang ng mga walang laman na pagpapatupad na binubuo ng pagbubukas at pagsasara ng mga kulot na bracket?"

"Maaari mo. Ngunit ang mga paghihigpit na ito ay tulad ng privatemodifier. Ginagamit namin ang privatemodifier upang sadyang harangan ang direktang pag-access sa data, upang ang ibang mga programmer at ang kanilang mga klase ay gumamit ng aming publicmga pamamaraan."

Ang parehong naaangkop sa isang abstract na klase. Ang sinumang sumulat ng klase ay hindi gustong gumawa ng mga pagkakataon ng klase. Sa kabaligtaran, inaasahan ng may-akda na ang mga abstract na pamamaraan ng kanyang abstract na klase ay mamanahin at ma-override.

"Hindi ko pa rin maintindihan kung bakit gusto nating gawing kumplikado ang buhay natin sa ganitong paraan."

"Ang bentahe ng feature na ito ay makikita sa malalaking proyekto. Kung mas maraming klase ang mayroon ka, mas malinaw na kailangan mong ilarawan ang kanilang mga tungkulin. Makikita mo ang bentahe ng paggawa nito, at sa lalong madaling panahon. Kailangang dumaan ang lahat."