Java:访问修饰符比“受保护”更严格,比“私人”限制更少?
Posted
技术标签:
【中文标题】Java:访问修饰符比“受保护”更严格,比“私人”限制更少?【英文标题】:Java: Access modifier more restrictive than 'protected', less restrictive than 'private'? 【发布时间】:2010-11-27 18:36:49 【问题描述】:我想要类似于protected
的东西,其中只有实现protected
字段的类及其子类可以访问它。
所以,我希望能够将基类中的变量声明为private
,但仍然能够从子类中访问它。
也许这违背了子类化的本质,private
和/或protected
。
Java 中是否存在类似的东西?
【问题讨论】:
作为一般规则,公开变量是一个坏主意——即使是子类也是如此。也有例外,但我鼓励你认真思考为什么要这样做。 (我意识到同样的问题也适用于 getter 方法调用 - 只是想指出一个潜在的问题) 这个功能(虽然不是这个语法)可以通过使用受保护的 getter 方法来实现。 【参考方案1】:不,没有access modifier 可以做到这一点。 protected
修饰符是最接近的,但是它将字段暴露给同一包中的任何类以及子类(在同一包中或在同一包中)。
【讨论】:
【参考方案2】:Java 中的字段只有四种访问级别:
private
包私有(默认;无访问修饰符)
protected
public
protected
将允许子类、同一包中的其他类以及类本身的成员访问protected
成员。
简短的回答是,没有办法完全达到预期。
关于这四个访问修饰符的描述,The Java Tutorials 中的Controlling Access to Members of a Class 有更具体的信息。
【讨论】:
【参考方案3】:如果您控制代码库,则始终可以使用基类控制进入包的内容 - 如果它在其包中单独存在,则只有子类可以访问您想要保持私有的成员,子类除外。
【讨论】:
这是一个很好的解决方法。虽然它没有回答是否有这样的修饰符(没有)但确实提供了所需的功能。【参考方案4】:不可能。你仍然可以将变量声明为私有,然后声明修改变量的公共方法 超类。然后调用变量的公共方法。
【讨论】:
以上是关于Java:访问修饰符比“受保护”更严格,比“私人”限制更少?的主要内容,如果未能解决你的问题,请参考以下文章