为什么Java的接口不能定义构造函数?
巴扎黑
巴扎黑 2017-04-18 09:55:22
0
12
1158

为什么Java的接口不能定义构造函数?

巴扎黑
巴扎黑

membalas semua(12)
伊谢尔伦
非要逼死抽象类不可!
大家讲道理

Pertama sekali, anda mesti memahami peranan pembina Pembina adalah untuk memulakan atribut atau kaedah kelas secara automatik Kemudian masalahnya ialah antara muka Java dan PHP tidak boleh baharu. Jadi mengapa kita memerlukan pembina? Tiada cara untuk menghubungi

巴扎黑

Mengapa raja tiga mendatar dan satu menegak?

伊谢尔伦

Antara muka menentukan tingkah laku, bukan kaedah pengeluaran

小葫芦

Bagaimana anda membuat instantiat?

左手右手慢动作

Oleh kerana antara muka tidak akan mempunyai contoh sendiri, tidak ada keperluan untuk pembina.

Mengapa antara muka tidak mempunyai tika sendiri? Oleh kerana antara muka hanya mentakrifkan satu siri fungsi abstrak, apabila menggunakan antara muka, anda akan menggunakan kelas yang melaksanakan antara muka, dan anda tidak akan menggunakan antara muka secara langsung. Gunakan terus, fungsi tersebut hanyalah definisi dan tidak boleh digunakan

Sudah tentu, dalam Java 8, fungsi yang ditakrifkan oleh antara muka boleh mempunyai pelaksanaan lalai, tetapi anda masih tidak boleh terus menggunakan antara muka untuk memanggil fungsi tersebut.

阿神

Antara muka tidak boleh dibuat seketika. Jika ia boleh menjadi baharu, apa gunanya mempunyai antara muka? Walau bagaimanapun, selepas Java 8, antara muka boleh mempunyai kaedah lalai, yang boleh dipanggil terus

伊谢尔伦

Hei...semakin mudah soalan itu, lebih sukar untuk dijawab, saya hanya boleh mengatakan bahawa apabila bahasa Java direka, antara muka ditakrifkan sebagai spesifikasi yang perlu dipatuhi oleh kelas untuk kekurangan warisan tunggal. Terdapat sebuah buku "Programmer's Cry" di mana pengarangnya mengkritik reka bentuk antara muka Java dan menulis: "Goslin berkata bahawa jika bahasa Java ditulis semula, antara muka tidak akan dipertimbangkan."

巴扎黑

Kelas abstrak adalah OK. Antara muka tidak boleh menentukan butiran kaedah, hanya satu siri kelakuannya.

伊谢尔伦

Saya secara tentatif berpendapat bahawa penyoal ingin menggunakan pembina dalam antara muka kerana dia ingin melakukan beberapa penggunaan semula kod dalam kelas yang secara khusus melaksanakan antara muka.

interface I {
  public I() {
    system.out.println("不管你怎么实现,我最牛逼");
  }
}

Terdapat beberapa konflik antara "penggunaan semula kod" dan "pemisahan pelaksanaan antara muka".

  • Antara muka memilih penggunaan semula minimum dan pemisahan maksimum

  • Kelas umum mudah digunakan semula, tetapi antara muka tidak dipisahkan

  • Kelas abstrak ada di antaranya.

Seperti yang @MaxValue katakan, jika antara muka boleh mempunyai pembina, ia akan hampir sama dengan kedudukan kelas abstrak.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan