由于受保护的成员可以通过子类访问,因此它们是否是公共API的一部分?因此,它们是否具有与明确的公共成员相同的向后兼容性要求?
我猜想这个问题会变得更复杂,例如private[foo]
(例如Scala)。随意回答这个问题或不回答。
由于受保护的成员可以通过子类访问,因此它们是否是公共API的一部分?因此,它们是否具有与明确的公共成员相同的向后兼容性要求?
我猜想这个问题会变得更复杂,例如private[foo]
(例如Scala)。随意回答这个问题或不回答。
是,是:受保护的成员是导出的(公共)API的一部分,并且具有相同的兼容性要求。
Java将访问修饰符作为其后继的众多JVM和非JVM语言的先驱。而有效Java 对此事有权威性的陈述。
从第15项开始:最小化类和成员的可访问性,
...私有成员和程序包私有成员都是类实现的一部分,通常不会影响其导出的API。
对于公共类的成员,当访问级别从包私有变为受保护时,可访问性将大大增加。受保护的成员是该类导出的API的一部分,必须得到永久的支持。同样,导出类的受保护成员表示对实施细节的公开承诺。对受保护成员的需求应该相对较少。