gpt4 book ai didi

java - 您什么时候需要公共(public)实例变量?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:45 26 4
gpt4 key购买 nike

昨天我正在编写自己的 LinkedList 实现。我正在做这样的事情:

public class Node
{
Node next;
int value;

public Node()
{
next = null
value = 0;
}
}

然后在使用 Node 时,我正在执行 node.nextnode.value。然后我意识到——等等,我到底在做什么?这些实例变量应该是 private,然后我应该使用 getters() 和 setters() 访问,比如 getNext()setValue()

这让我想知道,什么时候需要其他private 实例变量?

最佳答案

从技术上讲,您要问两个问题:标题问题“何时适合使用公共(public)实例字段”,以及您的最后一句话“何时适合使用非私有(private)实例字段。”

什么时候有一个公共(public)实例字段是合适的?几乎每个人都知道答案几乎不会。我认为它们偶尔适用于非常小的值类,其行为类似于简单的 C 结构。一个很好的例子是 java.awt.Point 和 java.awt.Dimension。

这些实际上是特别好的例子,因为尽管它们很简单,但它们最终演变成使用访问器方法,这是一个很好的教训:即使一个看起来如此简单以至于公共(public)字段似乎可以接受的类也有可能成为某种东西这需要封装。 (Point 和 Dimension 继续保留这些公共(public)字段以实现向后兼容性。)

什么时候适合使用非私有(private)实例字段?大多数人没有利用没有访问修饰符的字段和方法(和类)是包私有(private)的这一事实,但包私有(private)字段在很多情况下都很有用。因为它们只能被同一个包访问,所以通常情况下这是你的代码,你可以相信自己不会做会破坏你的对象的“坏事”。我想说包私有(private)字段的合法用途比公共(public)字段要多得多。

也就是说,Point/Dimension 规则仍然适用:有很多次我认为我可以摆脱包私有(private)字段,后来才意识到我需要通过 get 和 set 方法进行封装。

protected 字段可能被使用得比它们应该使用的要多得多。在我看来,让子类直接修改状态而不是通过方法修改状态很少有什么大的收获。

关于java - 您什么时候需要公共(public)实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com