如何使类的成员只能在任何包中的子类中访问?受保护不是解决方案,因为它会将成员打开到其他非子类类。
答案 0 :(得分:1)
我理解你为什么要这样做;但是,Java根本不提供这种能力。
答案 1 :(得分:1)
Java不提供绝对封装。程序员需要一定的纪律 - 原始设计者和使用已发布API的任何人 - 遵守一些语言之外的规则。关于成员访问,您已经确定了一个这样的案例。你想要的东西在Java中是不可能的。
从更广泛的角度来看,我要指出,如果程序员愿意走得足够远,那么即使私有成员也可以被其他类访问。通过JNI进行的调用不必遵守任何访问修饰符。例如,参见Can a native method call a private method?
语言外规范的其他示例包括{('start_date','end_date'): "index_period(params['start_date'], params['stop_date']", etc }
/ equals
的合同,必须满足这些合同才能使类在集合方面表现良好,但不会在集合层面强制执行。语言。
答案 2 :(得分:1)
您可以使用protected
成员进行抽象类,并在另一个包中实现它。考虑一下你为某些事情创建了一些lib和设计可扩展性。 lib的后续用户将实现您的类的实现,并且可以访问受保护的成员,同时无法在您的包中创建实现类。在示例FilterReader类中,它设计为可扩展性,在您的代码中的某个地方实现它之后,java.io
包中的受保护字段和方法对于包中的其他类是私有的。
答案 3 :(得分:0)
在访问控制期间,您尝试实现的目标是不可能的:
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
您可能会重新考虑您的软件设计,因为您的问题是由架构引起的。 请更具体地在您的问题中获得进一步的答案。
解决您的问题可能会导致副作用,并且不是OOD方式。
访问私有成员的唯一方法是使用具有相同visibilty颁发的getter方法。