Artikel ini menjelaskan penggunaan antarmuka Java dan kelas abstrak. Bagikan untuk referensi Anda, sebagai berikut:
antarmuka
1 Karena Java tidak mendukung banyak warisan, dengan antarmuka, kelas hanya dapat mewarisi satu kelas induk, tetapi dapat menerapkan beberapa antarmuka, dan antarmuka itu sendiri juga dapat mewarisi banyak antarmuka.
2 Variabel anggota dalam antarmuka adalah tipe final statis publik secara default. Inisialisasi yang harus ditampilkan.
3 Metode dalam antarmuka adalah abstrak publik secara default. Deklarasi implisit.
4 Antarmuka tidak memiliki konstruktor dan tidak dapat dipakai.
5 Antarmuka tidak dapat menerapkan antarmuka lain, tetapi dapat mewarisi banyak antarmuka.
6 Jika suatu kelas mengimplementasikan antarmuka, maka semua metode abstrak dalam antarmuka harus diimplementasikan, jika tidak, kelas harus didefinisikan sebagai kelas abstrak.
Kelas abstrak
1 Jika suatu kelas dinyatakan sebagai abstrak, kelas ini tidak dapat menghasilkan objek dan hanya dapat digunakan diwarisi.
2 Metode abstrak harus ada di kelas abstrak.
3 Mungkin ada variabel umum dan metode umum di kelas abstrak.
4 Subclass mewarisi kelas abstrak harus mengimplementasikan metode abstraknya kecuali subclass adalah kelas abstrak.
private void print () {}; Pernyataan ini mewakili implementasi metode yang kosong.
abstrak void print (); Pernyataan ini mewakili abstraksi metode, tanpa implementasi.
Perbedaan antara antarmuka dan kelas abstrak
1 Antarmuka hanya dapat berisi metode abstrak, dan kelas abstrak dapat berisi metode biasa.
2 Antarmuka hanya dapat mendefinisikan sifat konstan statis. Kelas abstrak dapat mendefinisikan sifat biasa dan sifat konstan statis.
3 Antarmuka tidak berisi metode konstruktor, dan kelas abstrak dapat berisi metode konstruktor.
Kelas abstrak tidak dapat dipakai, tetapi tidak berarti bahwa ia tidak dapat memiliki konstruktor. Kelas abstrak dapat memiliki konstruktor, dan merupakan kelas pengganti.
1 Antarmuka adalah inti, yang mendefinisikan apa yang harus dilakukan dan berisi banyak metode, tetapi tidak menentukan bagaimana metode ini harus dilakukan.
2 Jika banyak kelas menerapkan antarmuka, maka masing -masing perlu mengimplementasikan metode tersebut dalam kode.
3 Jika implementasi beberapa kelas memiliki kesamaan, kelas abstrak dapat diabstraksikan untuk memungkinkan kelas abstrak untuk mengimplementasikan kode umum antarmuka, sedangkan metode yang dipersonalisasi tersebut diimplementasikan oleh setiap subkelas.
Oleh karena itu, kelas abstrak dirancang untuk menyederhanakan implementasi antarmuka. Mereka tidak hanya menyediakan implementasi metode publik, memungkinkan Anda untuk berkembang dengan cepat, tetapi juga memungkinkan kelas Anda untuk mengimplementasikan semua metode sendiri tanpa masalah kopling yang ketat.
Aplikasinya sangat sederhana
1. Tentukan antarmuka terlebih dahulu
2 Jika ada beberapa implementasi antarmuka yang memiliki bagian umum, gunakan kelas abstrak dan mengintegrasikannya.
Perbedaan antara antarmuka dan abstrak kelas-saya yakin Anda tidak akan bingung setelah membacanya
Saya pikir untuk programmer yang menggunakan bahasa pemrograman yang berorientasi objek, istilah "antarmuka" harus familier, tetapi saya bertanya-tanya apakah Anda memiliki keraguan seperti itu: apa tujuan antarmuka? Apa perbedaan antara kelasnya dan abstrak? Bisakah kelas abstrak digunakan sebagai pengganti antarmuka? Selain itu, sebagai pemrogram, Anda harus sering mendengar frasa "pemrograman berorientasi antarmuka", jadi apa artinya? Apa konotasi ideologisnya? Apa hubungan dengan pemrograman yang berorientasi objek? Artikel ini akan menjawab pertanyaan ini satu per satu.
1. Apa hubungan antara pemrograman berorientasi antarmuka dan pemrograman yang berorientasi objek
Pertama-tama, pemrograman berorientasi antarmuka dan pemrograman yang berorientasi objek tidak horizontal. Ini bukan ide pemrograman independen yang lebih maju daripada pemrograman yang berorientasi objek, tetapi melekat pada sistem pemikiran yang berorientasi objek dan termasuk bagiannya. Dengan kata lain, ini adalah salah satu esensi pemikiran dalam sistem pemrograman yang berorientasi objek.
2. Sifat antarmuka
Antarmuka adalah yang seolah -olah terdiri dari beberapa definisi metode tanpa kode tubuh. Ini memiliki nama yang unik dan dapat diimplementasikan oleh kelas atau antarmuka lainnya (atau juga dapat dikatakan diwarisi). Mungkin terlihat seperti berikut dalam bentuk:
antarmuka antarmuka {void method1 (); void Method2 (int paragraf); void method3 (String ParA2, String PARA3); }Jadi, apa inti dari suatu antarmuka? Atau apa arti keberadaan suatu antarmuka? Saya pikir itu dapat dipertimbangkan dari dua perspektif berikut:
1) Antarmuka adalah seperangkat aturan yang menentukan seperangkat aturan yang harus dimiliki oleh suatu kelas atau antarmuka yang mengimplementasikan antarmuka ini. Ini mewujudkan konsep alam bahwa "jika Anda ... Anda harus bisa ..."
Misalnya, di alam, orang bisa makan, yaitu, "Jika Anda adalah manusia, Anda harus bisa makan." Kemudian ketika disimulasikan dalam program komputer, harus ada iPerson (secara khusus, nama antarmuka dimulai dengan "i") antarmuka, dan ada metode yang disebut EAT (). Kemudian kami menetapkan bahwa setiap kelas yang mewakili "manusia" harus mengimplementasikan antarmuka iPerson, yang mensimulasikan aturan alami "jika Anda manusia, Anda harus bisa makan".
Dari sini, saya pikir Anda juga dapat melihat beberapa ide yang berorientasi objek. Salah satu inti pemikiran yang berorientasi objek adalah mensimulasikan dunia nyata dan hal-hal abstrak di dunia nyata ke dalam kategori. Seluruh program bergantung pada contoh dari berbagai jenis untuk berkomunikasi satu sama lain dan bekerja sama satu sama lain untuk menyelesaikan fungsi sistem. Ini sangat konsisten dengan kondisi operasi dunia nyata dan juga inti dari pemikiran yang berorientasi objek.
2) Antarmuka adalah representasi abstrak dari hal -hal serupa pada pandangan granular tertentu. Perhatikan bahwa di sini saya menekankan pada pandangan granular tertentu, karena konsep "hal yang sama" adalah relatif, dan bervariasi karena pandangan granular yang berbeda.
Misalnya, di mata saya, saya adalah seseorang, dan ada perbedaan mendasar antara saya dan babi. Saya dapat menerima pernyataan bahwa teman sekelas saya dan saya sama, tetapi saya tidak boleh menerima bahwa saya sama dengan babi. Namun, jika mata ahli zoologi seperti babi, saya harus sama, karena kita berdua adalah hewan, dia dapat berpikir bahwa "manusia" dan "babi" telah menerapkan antarmuka ianimal. Ketika dia mempelajari perilaku hewan, dia tidak akan memperlakukan saya dan babi secara terpisah, tetapi akan mempelajarinya dari ukuran partikel yang lebih besar dari "hewan", tetapi ia akan berpikir bahwa ada perbedaan penting antara saya dan pohon.
Sekarang saya telah berubah menjadi ahli genetika, situasinya berbeda. Karena semua makhluk hidup dapat diwariskan, di matanya, saya tidak hanya tidak berbeda dengan babi, tetapi juga dari nyamuk, bakteri, pohon, jamur, atau bahkan virus SARS, karena ia akan berpikir bahwa kita semua telah menerapkan semua antarmuka yang tidak dapat dielakkan (Catatan: Turunkan VI. Warisan), itu adalah semua hal yang dapat dielakkan. Dia tidak akan mempelajari kita secara terpisah, tetapi akan mempelajari semua makhluk hidup sebagai tipe serupa. Di matanya, tidak ada perbedaan antara manusia dan virus, hanya zat yang diwariskan dan zat yang tidak saling bersaing. Tapi setidaknya, masih ada perbedaan antara saya dan batu.
Namun sayangnya, suatu hari, seorang pria hebat muncul di bumi, bernama Lenin. Setelah ia terbiasa dengan karya Max dan Engels dari materialisme dialektis, ia memiliki banyak pengalaman, jadi ia memberikan definisi yang terkenal: apa yang disebut materi adalah realitas objektif yang dapat tercermin oleh kesadaran. Pada titik ini, saya tidak lagi berbeda dari batu, jejak udara, idiom, dan medan elektromagnetik yang mentransmisikan sinyal ponsel, karena di mata Lenin, kita semua adalah realitas objektif yang dapat tercermin oleh kesadaran. Jika Lenin adalah seorang programmer, ia akan mengatakan ini: apa yang disebut masalah adalah contoh yang dihasilkan oleh semua kelas yang menerapkan dua antarmuka "ireflectabe" dan "iesse". (Catatan: Refleksi V.
Mungkin Anda akan berpikir bahwa contoh saya di atas adalah omong kosong, tetapi ini adalah arti antarmuka. Salah satu ide dan inti yang berorientasi objek adalah polimorfisme. Apa itu polimorfisme? Terus terang, itu adalah untuk memperlakukan hal serupa tanpa pandang bulu pada tingkat pandangan granular tertentu dan menanganinya secara seragam. Dan alasan mengapa saya berani melakukan ini adalah karena ada antarmuka. Seperti ahli genetika itu, ia mengerti bahwa semua organisme telah menerapkan antarmuka yang tidak dapat dielakkan. Selama mereka adalah organisme, harus ada metode Descend (), sehingga ia dapat mempelajarinya dengan cara yang disatukan tanpa mempelajari setiap organisme secara terpisah dan akhirnya melelahkan.
Mungkin kami tidak dapat memberi Anda kesan intuitif tentang sifat dan fungsi antarmuka. Kemudian dalam contoh -contoh berikut dan analisis beberapa pola desain, Anda akan mengalami konotasi antarmuka secara lebih intuitif.
3. Ringkasan Pemrograman Berorientasi Antarmuka
Melalui artikel di atas, saya pikir Anda memiliki pemahaman tentang konotasi ideologis antarmuka dan antarmuka. Jadi apa itu pemrograman berorientasi antarmuka? Definisi pribadi saya adalah: dalam analisis dan arsitektur sistem, kami membedakan hierarki dan ketergantungan. Setiap level tidak secara langsung menyediakan layanan ke lapisan atasnya (yaitu, tidak secara langsung dipakai di lapisan atas), tetapi sebaliknya mendefinisikan satu set antarmuka, hanya memaparkan fungsi antarmuka ke lapisan atas. Lapisan atas hanya tergantung pada lapisan bawah, dan tidak bergantung pada kelas tertentu.
Manfaat melakukan ini jelas, dan pertama -tama, sangat bermanfaat bagi fleksibilitas sistem. Ketika lapisan bawah perlu diubah, selama antarmuka dan fungsi antarmuka tetap tidak berubah, lapisan atas tidak perlu melakukan modifikasi apa pun. Anda bahkan dapat mengganti lapisan bawah tanpa mengubah kode lapisan atas, sama seperti kami mengganti hard drive WD 60G dengan hard drive 160g seagate. Tidak perlu membuat perubahan di bagian lain dari komputer, tetapi cukup mencabut hard drive asli dan mencolokkan hard drive baru, karena bagian lain dari komputer tidak bergantung pada hard drive spesifik, tetapi hanya bergantung pada antarmuka IDE. Selama hard drive mengimplementasikan antarmuka ini, itu dapat diganti. Dari sini, antarmuka dalam program ini sangat mirip dengan antarmuka dalam kenyataan, jadi saya selalu percaya bahwa antarmuka kata sangat mirip!
Keuntungan lain dari menggunakan antarmuka adalah bahwa pengembang dari berbagai komponen atau level dapat memulai konstruksi secara paralel, sama seperti mereka yang membangun hard disk tidak perlu membuat CPU atau monitor. Selama antarmuka konsisten dan desainnya masuk akal, pengembangan dapat dilakukan secara paralel, sehingga meningkatkan efisiensi.
Artikel ini akan datang ke sini terlebih dahulu. Akhirnya, saya ingin mengatakan sesuatu yang lain: esensi dari objek yang berorientasi pada objek adalah mensimulasikan realitas, yang juga dapat dikatakan sebagai jiwa artikel saya. Oleh karena itu, lebih memikirkan hal-hal yang berorientasi pada objek dari kenyataan akan sangat bermanfaat untuk meningkatkan analisis sistem dan kemampuan desain.
Pada artikel berikutnya, saya akan menggunakan contoh untuk menunjukkan metode dasar pemrograman antarmuka.
Dalam artikel ketiga, saya akan menganalisis beberapa ide pemrograman berorientasi antarmuka dalam pola desain klasik dan menganalisis ide-ide berorientasi antarmuka dalam arsitektur hierarkis .NET.
Tambahan untuk artikel ini:
Setelah membaca balasan Anda dengan cermat, saya sangat senang membahas masalah teknis dengan Anda. Terima kasih kepada teman -teman Anda yang memberikan penegasan, dan juga kepada teman -teman Anda yang mengajukan pendapat dan pertanyaan, yang mendorong saya untuk berpikir lebih dalam tentang sesuatu dan berharap untuk membuat kemajuan melalui ini. Di sini saya ingin menambahkan sesuatu untuk membahas beberapa masalah yang lebih terkonsentrasi dalam tanggapan.
1. Mengenai dua kata "antarmuka" dalam "pemrograman berorientasi antarmuka" dan "antarmuka" bahasa yang berorientasi objek spesifik
Saya melihat seorang teman yang menyarankan bahwa kata "antarmuka" dalam "pemrograman berorientasi antarmuka" harus memiliki jangkauan yang lebih besar daripada antarmuka dalam bahasa pemrograman sederhana. Setelah memikirkannya, saya pikir itu masuk akal. Apa yang saya tulis di sini memang tidak masuk akal. Saya pikir "antarmuka" dalam bahasa yang berorientasi objek mengacu pada struktur kode tertentu, seperti antarmuka yang ditentukan dalam C# dengan kata kunci antarmuka. "Antarmuka" dalam "pemrograman berorientasi antarmuka" dapat dikatakan sebagai komponen struktural yang mengacu pada tingkat yang lebih abstrak dari perspektif arsitektur perangkat lunak dan dari tingkat yang lebih abstrak. Dalam hal ini, jika kelas abstrak didefinisikan dan tujuannya adalah untuk mencapai polimorfisme, maka saya pikir masuk akal untuk menyebut kelas abstrak ini juga "antarmuka". Tetapi apakah masuk akal untuk menggunakan kelas abstrak untuk mengimplementasikan polimorfisme? Diskusikan di artikel kedua di bawah ini.
Singkatnya, saya pikir konsep dua "antarmuka" berbeda dan terkait satu sama lain. Antarmuka dalam "pemrograman berorientasi antarmuka" adalah komponen arsitektur pada tingkat ideologis untuk mewujudkan polimorfisme, meningkatkan fleksibilitas dan pemeliharaan perangkat lunak, sementara "antarmuka" dalam bahasa tertentu adalah sarana untuk mengimplementasikan komponen dalam ide ini ke dalam kode.
2. Tentang kelas dan antarmuka abstrak
Saya melihat bahwa ini adalah masalah yang lebih intens dalam balasan. Maaf, saya tidak berpikir dengan baik tentang masalah ini di artikel ini. Pemahaman pribadi saya tentang masalah ini adalah sebagai berikut:
Jika kita melihat kode spesifik saja, kedua konsep ini mudah dikaburkan, dan kita bahkan berpikir bahwa antarmuka itu berlebihan, karena dari fungsi spesifik saja, kecuali untuk beberapa warisan (C#, dalam Java), kelas abstrak tampaknya dapat menggantikan antarmuka sepenuhnya. Namun, apakah keberadaan antarmuka untuk mencapai warisan berganda? Tentu saja tidak. Saya pikir perbedaan antara kelas abstrak dan antarmuka adalah motivasi untuk digunakan. Penggunaan kelas abstrak adalah untuk penggunaan kembali kode, sedangkan motivasi untuk menggunakan antarmuka adalah untuk polimorfisme. Jadi, jika Anda ragu -ragu tentang apakah akan menggunakan antarmuka atau kelas abstrak di suatu tempat, maka Anda dapat memikirkan apa motivasi Anda.
Melihat keraguan teman tentang antarmuka iPerson, pemahaman pribadi saya adalah apakah antarmuka iPerson harus ditentukan tergantung pada aplikasi spesifik. Jika ada wanita dan pria dalam proyek kami, baik orang yang mewarisi, dan sebagian besar metode perempuan dan laki -laki sama, dan hanya ada satu metode, dosomethinginwc () berbeda (contohnya vulgar, tolong maafkan saya), maka tentu saja, jumlah yang lebih masuk akal () yang mendefinisikan duadk. Kode.
Namun, jika kelas wanita dan pria dalam program kami pada dasarnya tidak memiliki kode umum, dan ada kelas orang yang perlu instantiasi mereka, dan tidak ingin tahu apakah mereka pria atau wanita, tetapi hanya memperlakukan mereka sebagai manusia dan menerapkan polimorfisme, maka perlu untuk mendefinisikan mereka sebagai antarmuka.
Singkatnya, perbedaan antara antarmuka dan kelas abstrak terutama karena motivasi untuk digunakan, bukan dengan sendirinya. Ketika sesuatu harus didefinisikan sebagai kelas abstrak atau antarmuka, itu harus ditentukan berdasarkan konteks lingkungan tertentu.
Selain itu, saya pikir perbedaan lain antara antarmuka dan kelas abstrak adalah bahwa harus ada hubungan umum dan khusus antara kelas abstrak dan subkelasnya, sedangkan antarmuka hanyalah seperangkat aturan yang harus diterapkan oleh subkelasnya. (Tentu saja, mungkin ada hubungan umum dan khusus, tetapi tujuan penggunaan antarmuka kami tidak ada di sini.) Misalnya, dapat diterima untuk mendefinisikan kendaraan sebagai kelas abstrak, dan mobil, pesawat terbang, dan kapal sebagai subkelas, karena mobil, pesawat terbang, dan kapal semuanya adalah kendaraan khusus. Misalnya, antarmuka yang dapat disambungkan hanya mengatakan bahwa kelas yang mengimplementasikan antarmuka ini harus dapat dibandingkan, yang merupakan aturan. Jika kelas mobil mengimplementasikan Icomparable, itu hanya berarti bahwa ada cara di mobil kami untuk membandingkan dua instance mobil, yang mungkin lebih mahal daripada mobil atau lebih besar dari mobil mana. Tidak masalah, tetapi kita tidak bisa mengatakan bahwa "mobil itu istimewa dan dapat dibandingkan", yang tidak berlaku secara tata bahasa.
Saya harap artikel ini akan membantu pemrograman Java semua orang.