【问题标题】:Private Objects and Lists私有对象和列表
【发布时间】:2018-01-16 09:00:17
【问题描述】:

为什么从未定义实例化对象的封装?

Duck duck = new Duck();

这不会将所有对象设置为每个定义的默认值,从而可以在任何地方访问吗?

此外,List 在实例化时通常不设置私有是否有原因?

List<Ducks> ducks = new ArrayList<>();

我理解你的批评,我明白什么是封装。 明天我必须在 3 位老师面前展示一个巨大的网站,并想知道为什么我们将所有其他属性设置为私有,而实例化列表/对象封装从未定义。感谢您的任何认真回答

Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);

例如 java 教程中的这三个对象。从未说明它们的封装(私有/公共/受保护)

【问题讨论】:

  • ...谁说他们不是?
  • 你知道Java中的“私有”是什么意思吗?看起来不像,所以你能解释一下你认为它是什么意思吗?
  • 在该示例中声明实例字段的任何地方,它都有一个访问修饰符。在没有上下文的孤立行中,没有访问修饰符,因为它们没有声明字段:它们只是一般地展示如何实例化对象。
  • 当您不说明变量的声明位置时,问题中的所有这些“示例”都是毫无意义的。 “我在谈论实例化对象”那你真的不知道private 是什么意思。对象没有也不需要访问修饰符。
  • 对象不需要访问修饰符,但变量可以具有访问修饰符,具体取决于它的声明位置。因此,如果您对此类变量有疑问,则需要告诉我们这些变量的声明位置。

标签: java private instantiation encapsulation


【解决方案1】:

只有实例(和静态类变量)变量可以是私有的(方法和类也是如此),您可以自己将它们设置为私有。

public class Pond {
    private Duck duck;
}

访问修饰符不在方法中使用,仅在字段上使用,因为在方法中声明的变量仅在该方法中使用和访问。

如果你有上面代码中的实例变量,它的可见性取决于修饰符。 public 表示任何人都可以访问它等等:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

【讨论】:

  • 感谢您的回答,不过我并不怀疑简单属性的封装 :) 我想知道如果从未说明封装,实例化对象是否可以随处访问。
  • 完美,所以如果我在一个类中实例化一个对象,而不将其声明为私有,则不能从另一个类访问它吗? :) 这真的只是在这里钓鱼的唯一方法
  • @ITGuru 不,如果您刚刚写了Duck duck,这意味着默认修饰符,同一包中的任何人都可以访问它。阅读修饰符,你就会明白
  • 但我没有写鸭鸭,我写的是鸭鸭 = new Duck();
  • @ITGuru 我在谈论实例变量。如果您在方法中谈论局部变量,则由于上述原因,您不使用修饰符。修饰符在您声明时设置,无论您是否实例化它们。
猜你喜欢
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2019-02-18
  • 1970-01-01
相关资源
最近更新 更多