Pertimbangkan contoh (yang mengkompilasi di java)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}
Mengapa antarmuka harus "dinyatakan" abstrak? Apakah ada aturan lain yang berlaku dengan antarmuka abstrak?
Akhirnya: Jika abstract
usang, mengapa itu dimasukkan di Jawa? Apakah ada riwayat untuk antarmuka abstrak?
Jawaban:
Ini bukan.
Antarmuka dan metode mereka secara implisit
abstract
dan menambahkan bahwa pengubah tidak ada bedanya.Tidak, aturan yang sama berlaku. Metode harus diterapkan oleh kelas pelaksana (konkret) apa pun.
Pertanyaan menarik. Saya menggali edisi pertama JLS, dan bahkan di sana tertulis "Pengubah ini sudah usang dan tidak boleh digunakan dalam program Java baru" .
Oke, menggali lebih jauh ... Setelah mengenai banyak tautan yang rusak, saya berhasil menemukan salinan Spesifikasi Oak 0.2 asli (atau "manual"). Cukup menarik, harus saya katakan, dan hanya 38 halaman secara total! :-)
Di bawah Bagian 5, Antarmuka, ini memberikan contoh berikut:
Dan di margin katanya
Dengan asumsi
=0
digantikan olehabstract
kata kunci, saya mendugaabstract
itu pada beberapa titik wajib untuk metode antarmuka!Artikel terkait: Java: Antarmuka abstrak dan metode antarmuka abstrak
sumber
abstract
di depan metode antarmuka.Itu tidak perlu, itu opsional, seperti
public
pada metode antarmuka.Lihat JLS tentang ini:
http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html
Dan
sumber
Tidak perlu mendeklarasikan abstrak antarmuka.
Sama seperti mendeklarasikan semua metode publik (yang sudah ada jika antarmuka publik) atau abstrak (yang sudah ada dalam antarmuka) berlebihan.
Tidak ada yang menghentikan Anda.
Hal-hal lain yang dapat Anda nyatakan secara eksplisit, tetapi tidak perlu:
extends Object
Antarmuka sudah "abstrak". Menerapkan kembali kata kunci itu sama sekali tidak membuat perbedaan.
sumber
Ketahuilah bahwa di Spring ini memiliki makna non akademik. Antarmuka abstrak adalah peringatan bagi pengembang untuk tidak menggunakannya
@Autowired
. Saya berharap bahwa musim semi / gerhana@Autowired
akan melihat atribut ini dan memperingatkan / gagal tentang penggunaan seperti itu.Contoh nyata: @Service proxy di bawah @Transnational ke @Repository perlu menggunakan metode dasar yang sama namun mereka harus menggunakan antarmuka berbeda yang memperpanjang antarmuka abstrak ini karena
@Autowired
. (Saya sebut antarmuka XXXSpec ini)sumber
[Spesifikasi Bahasa Jawa - 9.1.1.1
abstract
Antarmuka]Perhatikan juga bahwa metode anggota antarmuka secara implisit
public abstract
.[Spesifikasi Bahasa Jawa - 9.2 Anggota Antarmuka]
Mengapa pengubah tersebut tersirat? Tidak ada pengubah lain (bahkan pengubah ' tanpa pengubah ') yang akan berguna di sini, jadi Anda tidak perlu mengetiknya secara eksplisit.
sumber
Itu tidak perlu. Ini adalah kekhasan bahasa.
sumber
Itu tidak perlu, karena antarmuka secara abstrak abstrak karena semua metode dalam antarmuka abstrak.
sumber
Antarmuka abstrak tidak redundan seperti yang dikatakan semua orang, setidaknya secara teori.
Antarmuka dapat diperluas, seperti halnya Kelas. Jika Anda mendesain hierarki Antarmuka untuk aplikasi Anda, Anda mungkin memiliki Antarmuka 'Basis', Anda memperluas dari Antarmuka lain dari tetapi tidak ingin sebagai Obyek itu sendiri.
Contoh:
Anda tidak ingin Kelas mengimplementasikan MyBaseInterface, hanya dua yang lain, MMyDog dan MyBoat, tetapi kedua antarmuka berbagi antarmuka MyBaseInterface, jadi miliki properti 'nama'.
Saya tahu ini agak akademis, tetapi saya pikir beberapa orang mungkin menganggapnya menarik. :-)
Ini benar-benar hanya 'penanda' dalam hal ini, untuk memberi sinyal kepada implementator dari antarmuka yang tidak dirancang untuk diimplementasikan sendiri. Saya harus menunjukkan kompiler (Setidaknya matahari / ora 1.6 saya mencobanya dengan) mengkompilasi kelas yang mengimplementasikan antarmuka abstrak.
sumber
Nah 'Antarmuka Abstrak' adalah konstruksi Leksikal: http://en.wikipedia.org/wiki/Lexical_analysis .
Diperlukan oleh kompiler, Anda juga bisa menulis
interface
.Yah jangan terlalu banyak ke konstruksi Lexical bahasa karena mereka mungkin telah meletakkannya di sana untuk menyelesaikan beberapa ambiguitas kompilasi yang disebut sebagai kasus khusus selama proses kompilasi atau untuk beberapa kompatibilitas mundur, cobalah untuk fokus pada konstruksi Lexical inti.
Inti dari `antarmuka adalah untuk menangkap beberapa konsep abstrak (ide / pemikiran / pemikiran tingkat tinggi dll) yang implementasinya dapat bervariasi ... yaitu, mungkin ada beberapa implementasi.
Antarmuka adalah tipe data abstrak murni yang mewakili fitur Objek yang ditangkap atau diwakilinya.
Fitur dapat direpresentasikan oleh ruang atau waktu. Ketika mereka diwakili oleh ruang (penyimpanan memori) itu berarti bahwa kelas beton Anda akan mengimplementasikan bidang dan metode / metode yang akan beroperasi di bidang itu atau berdasarkan waktu yang berarti bahwa tugas mengimplementasikan fitur adalah murni komputasi (memerlukan lebih banyak jam cpu untuk diproses) sehingga Anda memiliki trade off antara ruang dan waktu untuk implementasi fitur.
Jika kelas konkret Anda tidak mengimplementasikan semua fitur itu lagi menjadi abstrak karena Anda memiliki implementasi pemikiran atau ide atau abstrak Anda tetapi tidak lengkap, Anda tentukan berdasarkan
abstract
kelas.Kelas konkret akan menjadi kelas / set kelas yang akan sepenuhnya menangkap abstrak yang Anda coba untuk menangkap kelas XYZ.
Jadi polanya
sumber
"It seams like you are new to Java
. Betulkah?abstract
antarmuka sudah usang. Saya ingin tahu mengapa masih bisa diterima dan apa sejarah di balikabstract
antarmuka. Anda memberi saya panduan Java 101 tentang antarmuka abstrak vs.