1. Kelas dhasar umum
Dina iki kita bakal seneng smorgasbord topik menarik. Elinga nalika kita ngenalake ChessItem
kelas 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 ChessItem
kelas 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 ChessItem
kelas ing layar? Sawise kabeh, ora ana potongan catur, mula ora ana sing bisa digambar.
Pancen bener. Apa maneh, ora ana gunane nggawe ChessItem
obyek 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
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 abstract
tembung 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 abstract
tembung kunci.
Larangan nggawe obyek
Sampeyan ora bisa nggawe obyek saka kelas abstrak . Kode kuwi mung ora bakal kompilasi.
Kode | Katrangan |
---|---|
|
Kode iki ora kompilasi : |
|
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 private
modifier. 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.
GO TO FULL VERSION