【问题标题】:Create an attribute without encapsulation创建没有封装的属性
【发布时间】:2014-10-09 00:26:51
【问题描述】:

关于 oop 的简单问题。

假设我有一个包含属性的类。

public class Person {
  // Attributes
  private int age; 
}

如果我删除我的属性 age 的封装,它仍然是 private 吗?还是别的什么?

谢谢

【问题讨论】:

  • 看看tutorial page。它应该解释。
  • 如果你的字段没有修饰符,它将是包私有的。
  • 让我们假设它是包私有的!
  • 如果您没有明确声明 Java 属性的可见性,它将保持某种“半保护”状态;该属性将在类本身和包中可见,但在子类或项目的其余部分中不可见。这被认为是一种不好的软件设计实践。

标签: java oop encapsulation


【解决方案1】:

如果你这样做,该属性将可以从类和包中访问,但不能从子类和项目的其余部分访问。因此,该属性将是某种semi protected 变量。这不是 OOP 中推荐的方法。

您可能会发现此tutorial 很有帮助。

希望对你有帮助。

克莱门西奥·莫拉莱斯·卢卡斯。

【讨论】:

  • 最后一句话真的让我大吃一惊。我发现默认可见性是封装的一个非常有用的方面。请证明此陈述或将其删除。
  • 如果您阅读了我在答案中发布的链接(属于 Oracle 官方 Java SE 教程),您会读到“使用私有,除非您有充分的理由不这样做。”。这意味着,在几乎所有情况下,您都必须使用私有可见性。
  • 我确实阅读了链接的文档。但是,没有迹象表明“默认可见性不是 OOP 中推荐的方法”。相反,您引用的要点以“使用对特定成员有意义的最严格的访问级别”开头。这是推荐的方法。
  • 我坚持,指示是“使用私人,除非你有充分的理由不这样做。”通过使用私有,您使用的是最严格的访问级别。如果这是有道理的(并且经验告诉我,在大多数情况下它是有道理的),私有是您需要的可见性,所以这是推荐的方法。用您的话来说,“使用对特定成员有意义的最严格的访问级别”。私有比默认可见性更严格,所以你含蓄地说我是对的。
猜你喜欢
  • 2021-11-17
  • 2011-02-23
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2014-07-26
  • 2013-01-06
相关资源
最近更新 更多