1. Kelas dhasar umum

Dina iki kita bakal seneng smorgasbord topik menarik. Elinga nalika kita ngenalake ChessItemkelas dhasar kanggo nyederhanakake kabeh kelas sing makili potongan catur? Mugi 🙂

Saiki bayangake yen saben potongan duwe draw()cara sing bisa nggambar ing layar. Sampeyan nelpon draw()cara, lan Piece ndudohke dhewe ing koordinat saiki. Iku bakal trep kanggo mindhah cara iki kanggo kelas dhasar.

Yen draw()metode kasebut ana ing kelas dasar ChessItem, mula kita bisa ngilangi ing kelas potongan lan nulis kode elegan kaya iki:

class ChessBoard
{
   public void drawAllChessItems()
   {
      // Add the pieces to the list
      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();
      }
   }
}

Kanthi ngenalake ChessItemkelas dhasar, kita bisa nyederhanakake kode kasebut: ora perlu nelpon metode saben kelas kanthi kapisah, kita bisa kanthi gampang nyimpen kabeh obyek ing koleksi siji, lsp.

Nanging ing kene ana pitakonan sing menarik: apa draw()cara sing kudu diumumake langsung ing ChessItemkelas ing layar? Sawise kabeh, ora ana potongan catur, mula ora ana sing bisa digambar.

Pancen bener. Apa maneh, ora ana gunane nggawe ChessItemobyek langsung. Iku dudu potongan catur, nanging mung abstraksi - kelas sing digawe kanggo penak kita. Iki minangka cara abstraksi ing OOP : kita mindhah data lan metode penting (sing dienggo bareng kabeh potongan) menyang kelas dhasar, lan tetep beda ing kelas turunan sing kapisah.


2. Kelas abstrak

Kelas abstrak

Kanggo kahanan kaya mengkono, Jawa nduweni kelas khusus: kelas abstrak . Iki dirancang kanggo nggampangake programer nggarap kelas sing padha lan nyuda jumlah duplikat kode kasebut.

Mangkene telung perkara sing kudu dingerteni babagan kelas abstrak.

Cara tanpa implementasine

Kelas abstrak bisa duwe deklarasi metode tanpa implementasine. Iki persis sing nggawe metode abstrak. Badan metode mung diganti nganggo titik koma. Lan sadurunge jeneng metode, kita nulis abstracttembung kunci. Tuladha:

public abstract class ChessItem
{
   public int x, y; // Coordinates
   private int value; // The piece's value
   public int getValue() // Ordinary method that returns value field
   {
      return value;
   }

   public abstract void draw(); // Abstract method. The implementation is missing.
}

Kelas abstrak

Saben cara tanpa implementasi ditandhani karo tembung kunci abstrak. Yen kelas duwe siji metode abstrak, kelas kasebut uga ditandhani nganggo abstracttembung kunci.

Larangan nggawe obyek

Sampeyan ora bisa nggawe obyek saka kelas abstrak . Kode kuwi mung ora bakal kompilasi.

Kode Katrangan
ChessItem item = new ChessItem();
item.draw();
Kode iki ora kompilasi :
ChessItem item = new Queen();
item.draw();
Nanging sampeyan bisa nindakake iki

Warisan kelas abstrak

Yen kelas sampeyan entuk kelas abstrak, mula sampeyan kudu ngilangi kabeh metode abstrak sing diwarisake, yaiku sampeyan kudu nulis implementasine. Yen ora, kelas sampeyan uga kudu diumumake abstrak.

Yen kelas duwe malah siji cara unimplemented ngumumaké langsung ing utawa dipun warisaken saka kelas induk, banjur kelas dianggep abstrak.

Lan kenapa kabeh iki perlu? Napa kelas abstrak dibutuhake? Apa ora bisa nggunakake sing biasa wae? Lan tinimbang metode abstrak, apa ora bisa nulis rong kurung kriting kosong minangka awak metode?

Awak dewe iso. Nanging watesan iki padha karo privatemodifier. Kita nggunakake tembung kunci pribadi kanggo sengaja nyegah programer liyane saka ngakses data langsung lan meksa wong-wong mau mung nggunakake cara umum nalika nulis kelas.

Iku padha karo kelas abstrak. Penulis kelas abstrak ora pengin obyek kelas digawe. Nanging, penulis ngarepake metode abstrak diwarisake saka kelas abstrak lan banjur diganti.

Kauntungan saka pendekatan iki gampang katon ing proyek gedhe. Luwih akeh kelas sing sampeyan duwe, luwih jelas sampeyan kudu nggambarake perane. Sampeyan bakal weruh keuntungan saka pendekatan iki ing mangsa cedhak. Saben bab dadi liwat iki.