当前位置: 首页 > 面试题库 >

如何使数据成员仅可用于类和子类

陈誉
2023-03-14
问题内容

Java的访问级别表显示了用于控制对类成员的访问的4个不同选项:

Modifier    Class  Package Subclass World
public      Y      Y       Y        Y
protected   Y      Y       Y        N
no modifier Y      Y       N        N
private     Y      N       N        N

但是,没有用于“仅类和子类可访问”的修饰符。那是:

Modifier    Class  Package Subclass World
c++prot     Y      N       Y        N

是否有可能在Java中定义这种访问级别?

如果是这样,怎么办?

如果无法做到这一点,那一定是由于经过深思熟虑的设计原则。如果是这样,那是什么原则。换句话说,为什么在Java中具有这样的访问级别不是一个好主意?


问题答案:

设计原则是开发人员不要恶意入侵自己的程序。如果您不信任同一包中的类不能正确运行,那么恕我直言,您会遇到严重的非技术性问题。

访问修饰符用于限制意外错误,它们试图以最小的复杂度停止大多数错误。

顺便说一句:通过反射/ JNI调用,您可以绕过所有访问修饰符,因此它们不是坚如磐石的安全措施恕我直言。



 类似资料:
  • 我需要让对象的某些部分序列化默认值,而有些部分不序列化。 在下面的帖子中,我了解了如何根据类型做到这一点:Json。NET:如何使DefaultValueHandling仅适用于某些类型? 但是这个解决方案只适用于类型,不会是递归的。 预期行为: 重新序列化时: ContractProvider中是否有我可以重写的内容,或者我可以添加到成员或类中的属性来选择DefaultValueHandling

  • 员函数调整客户的银行借贷(例如 BanLAccount 类的 private 数据成员)。 类通常提供 public 成员函数,让类的客户设置(写入)或读取(取得) private 数据成员的值。这些函数通常称为get和set。更具体地说,设置数据成员interestRate的成员函数通常称为setInterestRate,读取数据成员IntersetRate的值通常称为 getInterestR

  • 主要内容:在类体中和类体外定义成员函数的区别类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是

  • 我正在使用Hazelcast CP子系统,但我的应用程序运行在两个不同的数据中心中。由于许多原因,不可能在短时间内将其扩展到至少一个具有完整应用程序和所有内存中数据的数据中心。但我明白,如果没有第三个地方的成员,我就无法避免分裂大脑的情况。所以主要的问题是:有没有可能有一个Hazelcast成员,它不存储任何数据,但单独作为CP子系统成员? 对于一个仅充当两个数据中心之间的平衡器的小应用程序,我将

  • 我试图使用基于模板的类作为另一个类的成员。另一个类将根据其数据成员值决定基于模板的成员应该使用的数据类型。为此,我使用了一点多态性来决定实例化的运行时。 然后,打印函数将根据 T 的类型进行打印,它是 int 还是 float。此时我收到链接器错误。 错误LNK2019:未解析的外部符号" public:_ this call template dynamic::template dynamic(

  • 顺便说一句,我确实编译了以下内容,但是专门化在运行时没有像预期的那样工作。基类型和派生类型最终要经历的非专用版本。 正确的语法是什么?