Sıklıkla dile getirilen neden "arayüzlerin genel API'leri tanımlaması" olmasına rağmen, bence bu aşırı bir basitleştirme. (Ve dairesel mantığın da "kokusu" var.)
Erişim değiştiricilerinin bir karışımına sahip arayüzlere sahip olmak anlamsız olmayacaktır; örneğin, kısmen genel ve kısmen arayüzle aynı paketteki diğer sınıflarla sınırlıdır. Aslında, bazı durumlarda bu çok yararlı olabilir, IMO.
Aslında, bir arayüzün üyelerini örtük olarak herkese açık hale getirmenin arkasındaki mantığın parçası , Java dilini daha basit hale getirmesi olduğunu düşünüyorum :
Örtük olarak genel arayüz üyeleri, programcıların uğraşması için daha kolaydır. Yöntem erişim değiştiricilerinin görünüşte rastgele seçildiği kodu (sınıfları) kaç kez gördünüz? Pek çok "sıradan" programcı, Java soyutlama sınırlarının en iyi nasıl yönetileceğini anlamakta güçlük çekiyor 1 . Arayüzlere genel / korumalı / özel paket eklemek, işleri onlar için daha da zorlaştırır.
Örtük olarak genel arabirim üyeleri, dil belirtimini basitleştirir ... ve dolayısıyla Java derleyici yazarları ve Yansıma API'lerini uygulayanlar için görevi basitleştirir.
"Arayüzlerin genel API'leri tanımladığı" düşüncesi, muhtemelen basitleştirici dil tasarım kararının bir sonucudur (veya karakteristiğidir) ... tam tersi değil. Fakat gerçekte, Java tasarımcılarının zihinlerinde muhtemelen iki düşünce çizgisi paralel olarak gelişti.
Her halükarda, JDK-8179193'teki RFE'ye verilen resmi yanıt , Java tasarım ekibinin , arabirimlere izin vermenin çok az gerçek fayda sağlayacak şekilde karmaşıklık eklediğine 2 karar verdiğini açıkça ortaya koymaktadır protected
. Kudos için @skomisa için kanıt bulma .
RFE'deki kanıt sorunu çözüyor. Bunun eklenmemesinin resmi nedeni budur.
1 - Tabii ki, en iyi programcılar bu konularda zorluk çekmezler ve daha zengin bir erişim kontrol özellikleri paletini memnuniyetle karşılayabilir. Ancak, kodları bakımı için başka birine verildiğinde ne olur?
2 - Kararlarına veya beyan ettikleri gerekçeye katılmayabilirsiniz, ancak bu tartışmalıdır.