java - 为什么接口的方法的访问修饰符只能是public不能是protected?
PHP中文网
PHP中文网 2017-04-17 17:32:01
0
5
1064

为什么抽象类的方法的访问修饰符可以是public和protected,而接口的方法的访问修饰符只能是public?

或者说,

接口的方法的访问修饰符为什么不能是protected?

PHP中文网
PHP中文网

认证0级讲师

membalas semua(5)
PHPzhong

Tekaan peribadi:

  • Pereka bahasa mungkin merasakan bahawa ini meningkatkan kerumitan model akses antara muka.

  • Adalah sangat sukar untuk kelas yang bertanggungjawab melaksanakan antara muka Jika pelaksanaan dan antara muka tidak berada dalam pakej yang sama, patutkah anda melaksanakan kaedah yang dilindungi?

Saya akan menggunakan dua contoh untuk menggambarkan di bawah yang pertama membuatkan anda rasa kaedah antara muka yang dilindungi tidak masuk akal. Yang satu lagi membuatkan anda berfikir, ia tidak masuk akal sama sekali.

Sebagai contoh, terdapat sample.interface di bawah bungkusan ISomething.

package sample.interface;
interface ISomething {
  protected foo1() { ... }
}

Kes berikut adalah pelik.

package a.place.of.nowhere;
// some code tries to use ISomething
ISomething someting = initializeSomething();

something.foo1();   // 抱歉,foo1是被保护的,和你不是一个package的,你滚吧。
// ME: shit... if I cannot use anything of this interface, why the heck you expose this interface to me...

Malah kurang masuk akal:

package a.place.of.nowhere;
// some code tries to implements ISomething
class SomethingImpl implements ISomething {
   // 抱歉,尽管你想implement foo1这个接口方法,但是由于你在a.place.of.nowhere这个package,foo1()对你是不可见的。走人吧。
   protected void foo1() {...}

Dengan cara ini, pelaksanaan kelas dan antara muka akan berada di bawah satu pakej. Apakah ini? Saya mungkin perlu melaksanakan berbilang antara muka, tetapi saya tidak boleh melakukannya secara berasingan. . .

阿神

Antara muka memainkan lebih banyak peranan dalam kaedah reka bentuk seni bina sistem, dan digunakan terutamanya untuk menentukan kontrak komunikasi antara modul.
Kelas abstrak memainkan peranan dalam pelaksanaan kod dan digunakan terutamanya untuk mencapai penggunaan semula kod.

小葫芦

Abstrak dan antara muka digunakan dalam situasi yang berbeza menggantikan premis mewarisi parameter, tetapi sasarannya ialah kelas induk langsung atau tidak langsung, dan kebenaran dilindungi dibenarkan. Antara muka biasanya digunakan untuk panggilan balik dalam kelas yang berbeza, seperti pendengar Jika ia mempunyai kebenaran yang dilindungi, walaupun anda mendapat contoh pendengar, anda tidak boleh mendapatkan kaedahnya, jadi panggilan balik itu sendiri tidak bermakna.
Sedikit pendapat peribadi, sila nyatakan jika terdapat sebarang kesilapan

迷茫

Apakah antara muka? Antara muka ditulis sebagai antara muka, yang digunakan untuk interaksi dengan dunia luar Jika anda menulisnya sebagai dilindungi, bagaimana anda boleh berinteraksi dengan dunia luar?

Antaramuka digunakan untuk menetapkan bahawa objek yang dilalui mesti melaksanakan kaedah tertentu Jika kaedah yang dilaksanakan tidak boleh dipanggil, maka apakah maksud penetapan ini? Ia tidak boleh dipanggil pula, kerana objeknya adalah sama tidak kira apa yang anda pakai.

Peter_Zhu

Antara muka adalah untuk pelaksanaan Ia adalah orang luar, bukan hubungan warisan, bukan saudara terdekat Jika wang mata wang=1^n, anda tidak boleh memberinya bahagian wang, dan dia tidak boleh menikmatinya.
Protect kelihatan kepada subkelas yang diwarisi Jika ia adalah orang anda sendiri, warisi sahaja semua wang kepadanya.
Jika antara muka ditetapkan untuk melindungi, maka ia adalah perempuan simpanan atau perempuan simpanan, yang menyalahi undang-undang.

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