繁体   English   中英

如何使一个类的成员只能在任何包的子类中访问?

[英]How to make a member of a class to be accessible only in subclasses in any packages?

如何使一个类的成员只能在任何包的子类中访问? 受保护不是解决方案,因为它将使成员打开其他非子类类。

我了解您为什么要这样做; 但是,Java根本不提供该功能。

Java不提供绝对封装。 程序员(原始设计者和使用已发布API的任何人)都需要遵守一些纪律,以遵守语言之外的某些规则。 关于成员访问,您已经确定了一种这样的情况。 您想要的东西在Java中是不可能的。

只是从更广阔的角度来看,我要指出的是,如果程序员愿意走的足够远的话,其他类也可以访问私有成员。 通过JNI进行的调用不必遵守任何访问修饰符。 参见,例如, 本机方法可以调用私有方法吗?

语言外规范的其他示例包括equals / hashCode协定,必须满足该协定才能使类相对于集合表现良好,但不能在语言级别上强制实施。

您可以使用protected成员进行抽象类,然后在另一个包中实现它。 考虑您为某些事物创建了一些lib和设计可扩展性。 库的后来用户将实现类的实现,并有权访问受保护的成员,但同时无法在包中创建实现类。 在示例FilterReader类中,在java.io包之外的代码中的某个地方实现了可扩展性之后,它设计用于可扩展性,受保护的字段和方法将对包中的其他类私有。

您要获得的控制权是不可能的:

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

您可能会重新考虑软件设计,因为问题是由体系结构引起的。 请更具体地说明您的问题,以获取进一步的答案。

解决您的问题可能会导致副作用,而且不是面向对象的。

访问私有成员的唯一方法是使用具有相同可见性的吸气剂方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM