1. Kelas dasar umum
Hari ini kita akan menikmati hamparan topik menarik. Ingat ketika kami memperkenalkan ChessItem
kelas dasar untuk menyederhanakan semua kelas yang mewakili bidak catur? Saya harap begitu 🙂
Sekarang bayangkan setiap bagian memiliki draw()
metode yang menangani menggambarnya di layar. Anda memanggil draw()
metodenya, dan bidak itu menggambar dirinya sendiri pada koordinatnya saat ini. Akan lebih mudah untuk memindahkan metode ini ke kelas dasar.
Jika draw()
metodenya ada di kelas dasar ChessItem, maka kita bisa menimpanya di kelas bidak dan menulis kode elegan seperti ini:
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();
}
}
}
Dengan memperkenalkan ChessItem
kelas dasar, kami dapat sangat menyederhanakan kode: tidak perlu memanggil metode setiap kelas secara terpisah, kami dapat dengan mudah menyimpan semua objek dalam satu koleksi, dll.
Tapi inilah pertanyaan yang menarik: draw()
metode apa yang harus dideklarasikan langsung di ChessItem
kelas menggambar di layar? Lagi pula, tidak ada bidak seperti itu dalam catur, jadi tidak ada yang bisa digambar.
Itu benar sekali. Terlebih lagi, tidak masuk akal untuk membuat ChessItem
objek secara langsung. Ini bukan bidak catur, melainkan hanya abstraksi — kelas yang kami buat untuk kenyamanan kami. Beginilah cara abstraksi bekerja di OOP : kami memindahkan data dan metode penting (yang dibagikan oleh semua bagian) ke kelas dasar, dan menyimpan perbedaannya di kelas keturunan yang terpisah.
2. Kelas abstrak

Untuk situasi seperti itu, Java memiliki jenis kelas khusus: kelas abstrak . Mereka dirancang untuk memudahkan pemrogram bekerja dengan kelas serupa dan mengurangi jumlah kode duplikat di dalamnya.
Berikut adalah tiga hal yang perlu diketahui tentang kelas abstrak.
Metode tanpa implementasi
Kelas abstrak dapat memiliki deklarasi metode tanpa implementasi. Inilah yang membuat metode ini abstrak. Badan metode hanya diganti dengan titik koma. Dan sebelum nama metodenya, kita tulis kata abstract
kuncinya. Contoh:
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
Setiap metode tanpa implementasi ditandai dengan kata kunci abstrak. Jika suatu kelas bahkan memiliki satu metode abstrak, kelas tersebut juga ditandai dengan kata abstract
kunci.
Melarang penciptaan objek
Anda tidak dapat membuat objek dari kelas abstrak . Kode seperti itu tidak akan dikompilasi.
Kode | Keterangan |
---|---|
|
Kode ini tidak dapat dikompilasi : |
|
Tapi Anda bisa melakukan ini |
Mewarisi kelas abstrak
Jika kelas Anda mewarisi kelas abstrak, maka Anda perlu mengganti semua metode abstrak yang diwariskan, yaitu Anda perlu menulis implementasinya. Jika tidak, kelas Anda sendiri juga harus dinyatakan abstrak.
Jika suatu kelas bahkan memiliki satu metode yang tidak diimplementasikan yang dideklarasikan langsung di dalamnya atau diwarisi dari kelas induk, maka kelas tersebut dianggap abstrak.
Dan mengapa semua ini perlu? Mengapa kelas abstrak dibutuhkan? Apakah tidak mungkin menggunakan yang biasa saja? Dan alih-alih metode abstrak, tidak bisakah kita menulis dua kurung kurawal kosong sebagai badan metode?
Kita bisa. Tetapi batasan ini mirip dengan private
pengubah. Kami menggunakan kata kunci privat untuk secara sengaja mencegah pemrogram lain mengakses data secara langsung dan memaksa mereka untuk hanya menggunakan metode publik kami saat menulis kelas mereka.
Itu sama dengan kelas abstrak. Penulis kelas abstrak tidak ingin objek kelas dibuat. Sebagai gantinya, penulis mengharapkan metode abstrak diwariskan dari kelas abstrak dan kemudian diganti.
Keuntungan dari pendekatan ini mudah terlihat dalam proyek-proyek besar. Semakin banyak kelas yang Anda miliki, semakin jelas Anda perlu menggambarkan peran mereka. Anda akan melihat manfaat dari pendekatan ini dalam waktu dekat. Setiap hal melewati ini.
GO TO FULL VERSION