Apa itu "kelas abstrak" di Jawa?
java
oop
interface
abstract-class
Ravindra babu
sumber
sumber
Jawaban:
Kelas abstrak adalah kelas yang tidak bisa dipakai. Kelas abstrak digunakan dengan membuat subclass warisan yang bisa dipakai. Kelas abstrak melakukan beberapa hal untuk subclass yang diwarisi:
Ini sebuah contoh:
Perhatikan bahwa "abstractMethod ()" tidak memiliki tubuh metode apa pun. Karena itu, Anda tidak dapat melakukan hal berikut:
Tidak ada metode yang mengimplementasikan
abstractMethod()
! Jadi tidak ada cara bagi JVM untuk mengetahui apa yang seharusnya dilakukan ketika mendapat sesuatunew ImplementingClass().abstractMethod()
.Ini benar
ImplementingClass
.Perhatikan bahwa Anda tidak perlu mendefinisikan
implementedMethod()
ataufinalMethod()
. Mereka sudah didefinisikan olehAbstractClass
.Ini satu lagi yang benar
ImplementingClass
.Dalam hal ini, Anda telah ditimpa
implementedMethod()
.Namun, karena
final
kata kunci, yang berikut ini tidak mungkin.Anda tidak dapat melakukan ini karena implementasi
finalMethod()
diAbstractClass
ditandai sebagai implementasi akhir darifinalMethod()
: tidak ada implementasi lain yang akan diizinkan.Sekarang Anda juga dapat menerapkan kelas abstrak dua kali:
Sekarang di suatu tempat Anda bisa menulis metode lain.
Perhatikan bahwa meskipun kita menyatakan
b
sebuahAbstractClass
jenis, itu menampilkan"Overriden!"
. Ini karena objek yang kita instantiasi sebenarnya adalahImplementingClass
, yangimplementedMethod()
tentu saja ditimpa. (Anda mungkin pernah melihat ini disebut sebagai polimorfisme.)Jika kita ingin mengakses anggota yang spesifik untuk subkelas tertentu, kita harus memilih ke subkelas itu terlebih dahulu:
Terakhir, Anda tidak dapat melakukan hal berikut:
Hanya satu kelas yang dapat diperpanjang sekaligus. Jika Anda perlu memperluas beberapa kelas, mereka harus berupa antarmuka. Kamu bisa melakukan ini:
Berikut ini contoh antarmuka:
Ini pada dasarnya sama dengan:
Satu-satunya perbedaan adalah bahwa cara kedua tidak membuat kompiler tahu bahwa itu sebenarnya sebuah antarmuka. Ini bisa bermanfaat jika Anda ingin orang hanya mengimplementasikan antarmuka Anda dan tidak ada yang lain. Namun, sebagai aturan umum pemula, jika kelas abstrak Anda hanya memiliki metode abstrak, Anda mungkin harus membuatnya menjadi antarmuka.
Berikut ini adalah ilegal:
Anda tidak dapat menerapkan metode dalam suatu antarmuka. Ini berarti bahwa jika Anda menerapkan dua antarmuka yang berbeda, metode yang berbeda di antarmuka tersebut tidak dapat bertabrakan. Karena semua metode dalam antarmuka adalah abstrak, Anda harus mengimplementasikan metode tersebut, dan karena metode Anda adalah satu-satunya implementasi dalam pohon warisan, kompiler tahu bahwa ia harus menggunakan metode Anda.
sumber
c.implementedMethod()
mencetak "Overriden!"?SecondImplementingClass
tidak menimpaimplementedMethod()
.Kelas Java menjadi abstrak dengan ketentuan sebagai berikut:
1. Setidaknya salah satu metode ditandai sebagai abstrak:
Dalam hal ini kompiler memaksa Anda untuk menandai seluruh kelas sebagai abstrak.
2. Kelas ditandai sebagai abstrak:
Seperti yang sudah dikatakan: Jika Anda memiliki metode abstrak kompiler memaksa Anda untuk menandai seluruh kelas sebagai abstrak. Tetapi bahkan jika Anda tidak memiliki metode abstrak, Anda masih dapat menandai kelas sebagai abstrak.
Penggunaan umum:
Penggunaan umum dari kelas abstrak adalah untuk memberikan garis besar kelas yang mirip dengan antarmuka. Tetapi tidak seperti antarmuka yang sudah dapat menyediakan fungsionalitas, yaitu beberapa bagian dari kelas diimplementasikan dan beberapa bagian hanya diuraikan dengan deklarasi metode. ("abstrak")
Kelas abstrak tidak bisa dipakaikan, tetapi Anda bisa membuat kelas konkret berdasarkan kelas abstrak, yang kemudian bisa dipakai. Untuk melakukannya, Anda harus mewarisi dari kelas abstrak dan mengganti metode abstrak, yaitu menerapkannya.
sumber
abstract
kata kunci adalah semua yang diperlukan untuk sebuah kelas menjadi abstrak. Tetapi kelas konkret tidak dapat berisiabstract
metode . Jadi, jika kelas Anda memilikiabstract
metode, itu harus dinyatakan sebagaiabstract
kelas ke kompiler.Kelas yang dideklarasikan menggunakan kata kunci abstrak dikenal sebagai
abstract class
. Abstraksi adalah proses menyembunyikan detail implementasi data, dan hanya menunjukkan fungsionalitas kepada pengguna. Abstraksi memungkinkan Anda fokus pada apa yang dilakukan objek alih-alih bagaimana melakukannya.Hal utama dari kelas abstrak
Kelas abstrak mungkin atau mungkin tidak mengandung metode abstrak. Mungkin ada metode non abstrak.
Metode abstrak adalah metode yang dideklarasikan tanpa implementasi (tanpa kawat gigi, dan diikuti oleh tanda titik koma), seperti ini:
mis:
abstract void moveTo(double deltaX, double deltaY);
Jika suatu kelas memiliki setidaknya satu metode abstrak maka kelas itu harus abstrak
Kelas abstrak mungkin tidak dipakai (Anda tidak diizinkan membuat objek dari kelas Abstrak)
Untuk menggunakan kelas abstrak, Anda harus mewarisinya dari kelas lain. Berikan implementasi untuk semua metode abstrak di dalamnya.
Jika Anda mewarisi kelas abstrak, Anda harus menyediakan implementasi untuk semua metode abstrak di dalamnya.
Deklarasikan kelas abstrak Menentukan
abstract
kata kunci sebelum kelas selama deklarasi membuatnya abstrak. Lihat kode di bawah ini:Deklarasikan metode abstrak Menentukan
abstract
kata kunci sebelum metode selama deklarasi menjadikannya abstrak. Lihat kode di bawah ini,Mengapa kita perlu mengabstraksi kelas
Dalam aplikasi menggambar berorientasi objek, Anda dapat menggambar lingkaran, persegi panjang, garis, kurva Bezier, dan banyak objek grafik lainnya. Semua objek ini memiliki status tertentu (untuk ex -: posisi, orientasi, warna garis, warna isi) dan perilaku (untuk ex -: moveTo, rotate, resize, draw) secara umum. Beberapa status dan perilaku ini adalah sama untuk semua objek grafik (misalnya: mengisi warna, posisi, dan moveTo). Lainnya memerlukan implementasi yang berbeda (misalnya: mengubah ukuran atau menggambar). Semua objek grafis harus dapat menggambar atau mengubah ukuran sendiri, mereka hanya berbeda dalam cara mereka melakukannya.
Ini adalah situasi yang sempurna untuk superclass abstrak. Anda dapat mengambil keuntungan dari kesamaan, dan mendeklarasikan semua objek grafik untuk diwariskan dari objek induk abstrak yang sama (misalnya:
GraphicObject
seperti yang ditunjukkan pada gambar berikut.Pertama, Anda mendeklarasikan kelas abstrak
GraphicObject
,, untuk memberikan variabel dan metode anggota yang sepenuhnya dibagikan oleh semua subclass, seperti posisi saat ini dan metode moveTo.GraphicObject
juga menyatakan metode abstrak, seperti menggambar atau mengubah ukuran, yang perlu diimplementasikan oleh semua subclass tetapi harus diimplementasikan dengan cara yang berbeda. ItuGraphicObject
kelas dapat terlihat seperti ini:Penggunaan metode abstrak dalam sub-kelas Setiap subclass non abstrak
GraphicObject
, sepertiCircle
danRectangle
, harus menyediakan implementasi untukdraw
danresize
metode.Di dalam
main
metode Anda dapat memanggil semua metode seperti ini:Cara untuk mencapai abstraksi di Jawa
Ada dua cara untuk mencapai abstraksi di java
Kelas abstrak dengan konstruktor, anggota data, metode, dll
Keluaran:
Ingat dua aturan:
Jika kelas memiliki beberapa metode abstrak dan beberapa metode konkret, nyatakanlah sebagai
abstract
kelas.Jika kelas hanya memiliki metode abstrak, nyatakan sebagai
interface
.Referensi:
sumber
Ini adalah kelas yang tidak dapat dipakai, dan memaksa menerapkan kelas untuk, mungkin, menerapkan metode abstrak yang diuraikan.
sumber
Secara sederhana, Anda dapat menganggap kelas abstrak seperti Antarmuka dengan kemampuan sedikit lebih.
Anda tidak dapat membuat instance Antarmuka, yang juga berlaku untuk kelas abstrak.
Pada antarmuka Anda, Anda bisa mendefinisikan header metode dan SEMUA pelaksana dipaksa untuk menerapkan semuanya . Pada kelas abstrak Anda juga dapat menentukan header metode Anda, tetapi di sini - untuk perbedaan antarmuka - Anda juga dapat menentukan tubuh (biasanya implementasi default) dari metode ini. Terlebih lagi ketika kelas lain memperpanjang (perhatikan, bukan implementasikan dan karena itu Anda juga dapat memiliki hanya satu kelas abstrak per kelas anak) kelas abstrak Anda, mereka tidak dipaksa untuk menerapkan semua metode Anda dari kelas abstrak Anda, kecuali jika Anda menentukan metode abstrak ( dalam kasus seperti itu berfungsi seperti untuk antarmuka, Anda tidak dapat mendefinisikan tubuh metode).
Kalau tidak untuk metode normal dari kelas abstrak, "pewaris" dapat menggunakan perilaku default atau menimpanya, seperti biasa.
Contoh:
sumber
Dari dokumentasi oracle
Metode dan Kelas Abstrak:
Metode abstrak adalah metode yang dideklarasikan tanpa implementasi (tanpa kawat gigi, dan diikuti oleh tanda titik koma), seperti ini:
Jika suatu kelas menyertakan metode abstrak, maka kelas itu sendiri harus dinyatakan abstrak, seperti pada:
Ketika kelas abstrak disubclass, subclass biasanya menyediakan implementasi untuk semua metode abstrak di kelas induknya. Namun, jika tidak, maka subkelas juga harus dinyatakan abstrak .
Karena
abstract classes
daninterfaces
terkait, lihat pertanyaan SE di bawah ini:Apa perbedaan antara antarmuka dan kelas abstrak?
Bagaimana seharusnya saya menjelaskan perbedaan antara Interface dan kelas Abstrak?
sumber
Dapatkan jawaban Anda di sini:
Kelas abstrak vs Antarmuka di Jawa
Bisakah kelas abstrak memiliki metode final?
BTW - itu adalah pertanyaan yang Anda tanyakan baru-baru ini. Pikirkan tentang pertanyaan baru untuk membangun reputasi ...
Edit:
Baru sadar, bahwa poster-poster ini dan pertanyaan yang direferensikan memiliki nama yang sama atau setidaknya mirip tetapi user-id selalu berbeda. Jadi, ada masalah teknis, bahwa keyur memiliki masalah masuk lagi dan menemukan jawaban atas pertanyaannya atau ini adalah semacam permainan untuk menghibur komunitas SO;)
sumber
Sedikit tambahan untuk semua posting ini.
sumber
Kelas abstrak tidak bisa langsung dipakai, tetapi harus diturunkan dari agar dapat digunakan. Kelas HARUS abstrak jika berisi metode abstrak: baik secara langsung
atau secara tidak langsung
Namun, suatu kelas dapat abstrak tanpa mengandung metode abstrak. Ini cara untuk mencegah instan directation, mis
Gaya terakhir dari kelas abstrak dapat digunakan untuk membuat kelas "seperti antarmuka". Tidak seperti antarmuka, kelas abstrak diizinkan untuk berisi metode non-abstrak dan variabel instan. Anda dapat menggunakan ini untuk menyediakan beberapa fungsionalitas dasar untuk memperluas kelas.
Pola lain yang sering adalah untuk mengimplementasikan fungsi utama di kelas abstrak dan menentukan bagian dari algoritma dalam metode abstrak untuk diimplementasikan oleh kelas yang diperluas. Contoh bodoh:
sumber
Solusi - kelas dasar (abstrak)
sumber
Kelas abstrak adalah kelas yang dinyatakan abstrak - mungkin atau mungkin tidak termasuk metode abstrak. Kelas abstrak tidak bisa dipakai, tetapi mereka bisa subkelas.
Dengan kata lain, kelas yang dideklarasikan dengan kata kunci abstrak, dikenal sebagai kelas abstrak di java. Itu dapat memiliki metode abstrak (metode tanpa tubuh) dan non-abstrak (metode dengan tubuh).
Catatan Penting: - Kelas abstrak tidak dapat digunakan untuk instantiate objek, mereka dapat digunakan untuk membuat referensi objek, karena pendekatan Java terhadap run-time Polymorphism diimplementasikan melalui penggunaan referensi superclass. Dengan demikian, harus dimungkinkan untuk membuat referensi ke kelas abstrak sehingga dapat digunakan untuk menunjuk ke objek subclass. Anda akan melihat fitur ini dalam contoh di bawah ini
sumber
Kelas abstrak adalah kelas yang tidak sepenuhnya diimplementasikan tetapi menyediakan cetak biru untuk subclass. Ini dapat diimplementasikan sebagian karena mengandung metode konkret sepenuhnya, tetapi juga dapat menampung metode abstrak. Ini adalah metode dengan tanda tangan tetapi tidak ada badan metode. Subkelas apa pun harus mendefinisikan suatu badan untuk setiap metode abstrak, jika tidak, ia juga harus dinyatakan abstrak. Karena kelas abstrak tidak dapat dipakai, mereka harus diperluas oleh setidaknya satu subclass agar dapat digunakan. Pikirkan kelas abstrak sebagai kelas generik, dan subkelas ada di sana untuk mengisi informasi yang hilang.
sumber
Kelas yang dapat memiliki metode konkret dan non-konkret yaitu dengan dan tanpa tubuh.
sumber
Tidak melakukan apa-apa, cukup sediakan template umum yang akan dibagikan untuk subkelasnya
sumber