Untuk pemrograman berorientasi objek, abstraksi adalah salah satu fitur utamanya. Dalam Java, abstraksi OOP dapat tercermin dalam dua bentuk: antarmuka dan kelas abstrak. Ada terlalu banyak kesamaan dan terlalu banyak perbedaan di antara keduanya. Banyak orang berpikir bahwa mereka dapat digunakan secara bergantian ketika mereka pemula, tetapi sebenarnya tidak. Hari ini kita akan belajar tentang antarmuka dan kelas abstrak di Java. Berikut adalah garis besar direktori dari artikel ini:
1. Kelas abstrak
2. Antarmuka
3. Perbedaan antara kelas abstrak dan antarmuka
1. Kelas abstrak
Sebelum memahami kelas abstrak, mari kita pahami metode abstrak terlebih dahulu. Metode abstrak adalah metode khusus: hanya memiliki deklarasi, tetapi tidak ada implementasi konkret. Format deklarasi metode abstrak adalah:
abstrak void fun ();
Metode abstrak harus dimodifikasi dengan kata kunci abstrak. Jika kelas berisi metode abstrak, kelas ini disebut kelas abstrak. Kelas abstrak harus dimodifikasi dengan kata kunci abstrak sebelum kelas. Karena kelas abstrak berisi metode tanpa implementasi konkret, objek tidak dapat dibuat menggunakan kelas abstrak.
Satu masalah harus dicatat di bawah ini: Dalam buku "Java Programming Thought", kelas abstrak didefinisikan sebagai "kelas yang berisi metode abstrak", tetapi kemudian ditemukan bahwa jika kelas tidak mengandung metode abstrak dan hanya dimodifikasi dengan abstrak, itu juga merupakan kelas abstrak. Dengan kata lain, kelas abstrak tidak harus berisi metode abstrak. Saya pribadi berpikir ini adalah pertanyaan yang keras kepala, karena jika kelas abstrak tidak mengandung metode abstrak, mengapa harus dirancang sebagai kelas abstrak? Jadi ingat konsep ini untuk saat ini, dan tidak perlu menggali mengapa.
[Publik] Abstrak Class ClassName {Abstrak void fun ();}Dari sini kita dapat melihat bahwa kelas abstrak ada untuk warisan. Jika Anda mendefinisikan kelas abstrak tetapi tidak mewarisi itu, itu setara dengan membuat kelas abstrak ini dengan sia -sia, karena Anda tidak dapat menggunakannya untuk melakukan apa pun. Untuk kelas orang tua, jika salah satu metodenya diimplementasikan di kelas induk tidak memiliki makna dan harus diimplementasikan secara berbeda sesuai dengan kebutuhan aktual subkelas, maka metode ini dapat dinyatakan sebagai metode abstrak, dan kelas ini menjadi kelas abstrak.
Kelas yang mengandung metode abstrak disebut kelas abstrak, tetapi mereka tidak berarti bahwa metode abstrak hanya dapat ditemukan di kelas abstrak. Seperti kelas biasa, mereka juga dapat memiliki variabel anggota dan metode anggota biasa. Perhatikan bahwa ada tiga perbedaan utama antara kelas abstrak dan kelas biasa:
1) Metode abstrak harus publik atau dilindungi (karena jika itu pribadi, tidak dapat diwarisi oleh subkelas, dan subkelas tidak dapat mengimplementasikan metode ini). Secara default, itu publik.
2) Kelas abstrak tidak dapat digunakan untuk membuat objek;
3) Jika kelas mewarisi dari kelas abstrak, subkelas harus mengimplementasikan metode abstrak kelas induk. Jika subclass tidak mengimplementasikan metode abstrak kelas induk, subkelas juga harus didefinisikan sebagai kelas abstrak.
Dalam aspek lain, tidak ada perbedaan antara kelas abstrak dan kelas biasa.
2. Antarmuka
Antarmuka, yang disebut antarmuka dalam bahasa Inggris, dalam rekayasa perangkat lunak, antarmuka umumnya merujuk pada metode atau fungsi untuk dihubungi orang lain. Dari sini, kita dapat memahami niat asli desainer bahasa Java, yang merupakan abstraksi perilaku. Di Java, bentuk antarmuka adalah sebagai berikut:
[publik] antarmuka antarmuka {}
Antarmuka dapat berisi variabel dan metode. Namun, harus dicatat bahwa variabel dalam antarmuka akan secara implisit ditentukan sebagai variabel akhir statis public (dan hanya dapat berupa variabel akhir statis publik, dan memodifikasi swasta akan melaporkan kesalahan kompilasi), sementara metode akan secara implisit ditentukan sebagai metode abstrak yang tidak dapat dilaporkan dan semua yang ada di depan umum (menggunakan kata kunci lain, seperti privat, dilaporkan, dll. IS, metode dalam antarmuka harus berupa metode abstrak. Dari sini, kita dapat secara samar -samar melihat perbedaan antara antarmuka dan kelas abstrak. Antarmuka adalah tipe yang sangat abstrak. Ini lebih "abstrak" daripada kelas abstrak dan umumnya tidak mendefinisikan variabel dalam antarmuka.
Untuk membuat kelas mengikuti kelompok antarmuka tertentu, Anda perlu menggunakan kata kunci implement, format spesifik adalah sebagai berikut:
Class ClassName mengimplementasikan antarmuka1, antarmuka2, [....] {}
Dapat dilihat bahwa suatu kelas diizinkan untuk mengikuti beberapa antarmuka spesifik. Jika kelas non-abstrak mengikuti antarmuka, semua metode dalam antarmuka itu harus diimplementasikan. Untuk kelas abstrak yang mengikuti antarmuka, metode abstrak dalam antarmuka itu mungkin tidak diimplementasikan.
3. Perbedaan antara kelas abstrak dan antarmuka
1. Perbedaan pada tingkat tata bahasa
1) Kelas abstrak dapat memberikan detail implementasi metode anggota, sementara hanya metode abstrak publik yang dapat ada di antarmuka;
2) variabel anggota dalam kelas abstrak dapat dari berbagai jenis, sedangkan variabel anggota dalam antarmuka hanya dapat berupa tipe akhir statis publik;
3) Antarmuka tidak dapat berisi blok kode statis dan metode statis, sedangkan kelas abstrak dapat memiliki blok kode statis dan metode statis;
4) Kelas hanya dapat mewarisi satu kelas abstrak, sedangkan kelas dapat menerapkan banyak antarmuka.
2. Perbedaan di tingkat desain
1) Kelas abstrak adalah abstraksi hal -hal, yaitu abstraksi kelas, sedangkan antarmuka adalah abstraksi perilaku. Kelas abstrak mengabstraksi seluruh kelas, termasuk sifat dan perilaku, tetapi antarmuka mengabstraksi bagian kelas (perilaku). Untuk memberikan contoh sederhana, pesawat terbang dan burung adalah hal yang berbeda, tetapi mereka semua memiliki satu kesamaan, yaitu, mereka semua terbang. Kemudian saat mendesain, pesawat dapat dirancang sebagai pesawat terbang dan karakter seperti burung, tetapi karakteristik penerbangan tidak dapat dirancang sebagai kelas. Oleh karena itu, ini hanya karakteristik perilaku, bukan deskripsi abstrak dari jenis hal. Pada saat ini, penerbangan dapat dirancang sebagai antarmuka lalat, termasuk metode fly (), dan kemudian pesawat dan burung menerapkan antarmuka lalat sesuai dengan kebutuhan mereka sendiri. Kemudian untuk berbagai jenis pesawat, seperti jet tempur, pesawat sipil, dll., Ini dapat secara langsung mewarisi pesawat. Ini juga mirip dengan burung. Berbagai jenis burung dapat secara langsung mewarisi kelas burung. Dari sini, kita dapat melihat bahwa warisan adalah hubungan "ya atau tidak", sementara implementasi antarmuka adalah hubungan "ya atau tidak". Jika kelas mewarisi kelas abstrak, subkelas harus jenis kelas abstrak, dan implementasi antarmuka adalah hubungan yang tidak ada, seperti apakah burung dapat terbang (atau apakah ia memiliki karakteristik terbang). Jika bisa terbang, itu bisa mewujudkan antarmuka ini. Jika tidak bisa terbang, itu tidak akan menyadari antarmuka ini.
2) Tingkat desain yang berbeda, kelas abstrak adalah desain templat, sebagai kelas induk dari banyak subkelas. Dan antarmuka adalah kode perilaku, itu adalah desain radiasi. Apa itu desain template? Contoh paling sederhana adalah bahwa setiap orang telah menggunakan templat di PPT. Jika Anda menggunakan templat A untuk merancang ppt b dan ppt c, bagian umum dari ppt b dan ppt c adalah template A. Jika bagian publik mereka perlu diubah, Anda hanya perlu mengubah templat A, dan tidak perlu mengubah kembali ppt b dan ppt C. desain radiasi, seperti lift yang dilengkapi dengan beberapa jenis alarm, setelah alarm harus diperbarui, semua harus diperbarui. Artinya, untuk kelas abstrak, jika Anda perlu menambahkan metode baru, Anda dapat secara langsung menambahkan implementasi spesifik ke kelas abstrak, dan subclass tidak dapat diubah; Tetapi untuk antarmuka, itu tidak mungkin. Jika antarmuka diubah, semua kelas yang mengimplementasikan antarmuka ini harus diubah sesuai.
Mari kita lihat contoh yang paling banyak diedarkan di Internet: Contoh Pintu dan Alarm: Pintu memiliki dua tindakan: terbuka () dan tutup (). Pada saat ini, kita dapat mendefinisikan konsep abstrak ini melalui kelas dan antarmuka abstrak:
Pintu kelas abstrak {public abstrak void open (); public abstrak void close ();}atau:
Pintu antarmuka {public abstrak void open (); public abstrak void close ();}Tetapi sekarang jika kita membutuhkan pintu untuk memiliki fungsi alarm () lalu bagaimana cara mengimplementasikannya? Dua ide berikut disediakan:
1) Tempatkan ketiga fungsi di kelas abstrak, tetapi dengan cara ini, semua subkelas yang diwarisi dari kelas abstrak ini memiliki fungsi alarm, tetapi beberapa pintu tidak selalu memiliki fungsi alarm;
2) Masukkan ketiga fungsi ini di antarmuka. Kelas yang perlu menggunakan fungsi alarm perlu menerapkan Open () dan tutup () di antarmuka ini. Mungkin kelas ini tidak memiliki dua fungsi terbuka () dan tutup () sama sekali, seperti alarm kebakaran.
Dari sini, kita dapat melihat bahwa pintu terbuka (), tutup () dan alarm () hanya termasuk dalam dua perilaku dalam berbagai kategori. Open () dan Close () milik karakteristik perilaku yang melekat pada gerbang itu sendiri, sedangkan alarm () termasuk dalam perilaku tambahan yang diperluas. Oleh karena itu, solusi terbaik adalah merancang alarm sebagai antarmuka, termasuk perilaku alarm (), dan pintu sebagai kelas abstrak yang terpisah, termasuk perilaku terbuka dan dekat. Gerbang alarm lainnya dirancang untuk mewarisi kelas pintu dan mengimplementasikan antarmuka alarm.
antarmuka alram {void alarm ();} pintu kelas abstrak {void open (); void close ();} class alarmdoor memperluas pintu mengimplementasikan alarm {void oepn () {// ..} void close () {// ..} void alarm () {// ...}}Di atas adalah kompilasi antarmuka Java dan kelas abstrak. Saya berharap ini dapat membantu teman yang belajar pemrograman Java.