Maison > Questions et réponses > le corps du texte
为什么抽象类的方法的访问修饰符可以是public和protected,而接口的方法的访问修饰符只能是public?
或者说,
接口的方法的访问修饰符为什么不能是protected?
PHPz2017-04-17 17:34:01
Conjecture personnelle :
Les concepteurs de langage peuvent avoir l'impression que cela augmente la complexité du modèle d'accès à l'interface.
Ce sera très difficile pour la classe responsable de l'implémentation de l'interface. Si l'implémentation et l'interface ne sont pas dans le même package, devez-vous implémenter une méthode protégée ?
Je vais utiliser deux exemples pour illustrer ci-dessous. Le premier vous donne l'impression que la méthode d'interface protégée n'a pas de sens. L’autre fait réfléchir, ça n’a aucun sens.
Par exemple, il y a un sample.interface
sous le colis ISomething
.
package sample.interface;
interface ISomething {
protected foo1() { ... }
}
Le cas suivant est bizarre.
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...
Encore moins de sens :
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() {...}
De cette façon, l'implémentation de la classe et l'interface seront regroupées dans un seul package. Qu'est-ce que c'est ? Je devrai peut-être implémenter plusieurs interfaces, mais je ne peux pas les faire séparément. . .
阿神2017-04-17 17:34:01
Les interfaces jouent davantage un rôle dans les méthodes de conception d'architecture système, et sont principalement utilisées pour définir des contrats de communication entre modules.
Les classes abstraites jouent un rôle dans l'implémentation du code et sont principalement utilisées pour réaliser la réutilisation du code.
高洛峰2017-04-17 17:34:01
Le résumé et l'interface sont utilisés dans différentes situations. Le premier remplace sur le principe de l'héritage des paramètres, mais la cible est sa classe parent directe ou indirecte et les autorisations protégées sont autorisées. L'interface est généralement utilisée pour les rappels dans différentes classes, telles que l'écouteur. Si elle dispose d'autorisations protégées, même si vous obtenez l'instance d'écouteur, vous ne pouvez pas obtenir ses méthodes, donc le rappel lui-même n'a aucun sens.
Un petit avis personnel, merci de signaler s'il y a des erreurs
迷茫2017-04-17 17:34:01
Quelle est l'interface ? L'interface est écrite comme une interface, qui est utilisée pour interagir avec le monde extérieur. Si vous l'écrivez comme protégée, comment pouvez-vous interagir avec le monde extérieur ?
Les interfaces sont utilisées pour stipuler qu'un objet transmis doit implémenter certaines méthodes. Si les méthodes implémentées ne peuvent pas être appelées, alors quelle est la signification de cette stipulation ? De toute façon, on ne peut pas l'appeler, puisque l'objet est le même peu importe ce que vous portez.
天蓬老师2017-04-17 17:34:01
L'interface est destinée à la mise en œuvre. Il s'agit d'un étranger, pas d'une relation d'héritage, pas d'un parent immédiat. Si la devise money=1^n, vous ne pouvez pas lui donner une part de l'argent, et il ne peut pas en profiter.
Protect est visible pour les sous-classes héritées. S'il s'agit de votre propre personne, héritez-lui simplement de tout l'argent.
Si l'interface est configurée pour protéger, alors c'est soit une maîtresse, soit une maîtresse, ce qui est illégal.