gpt4 book ai didi

Java 私有(private)字段可见性

转载 作者:太空狗 更新时间:2023-10-29 22:38:04 30 4
gpt4 key购买 nike

所以前几天我正在制作一个类并使用 Eclipse 的方法创建 equals 方法,当我意识到它生成了以下工作代码时:

class Test {
private int privateInt;
[...]
public boolean equals(Object obj) {
[...]
Test t = (Test) obj;
if ( t.privateInt == privateInt ) {
[...]
}
}

t.privateInt..????这应该是私有(private)的!所以我想除了 private、protected、package protected 和 public 之外,还有一个字段可见性。

那么这里发生了什么?这个怎么称呼有人会在哪里使用它?这不会破坏封装吗?如果类没有修改器而我更改了这个怎么办? C++ 也会发生这种情况吗?这是面向对象的习语吗?如果不是,那 Java 为什么要这样做?

一般来说,我在哪里可以找到这方面的信息?

谢谢。

最佳答案

它可以从同一类的不同实例访问。

根据 this page (加粗我的):

At the member level, you can also use the public modifier or no modifier (package-private) just as with top-level classes, and with the same meaning. For members, there are two additional access modifiers: private and protected. The private modifier specifies that the member can only be accessed in its own class.

为了清楚起见,我将重写这一行:

if ( t.privateInt == this.privateInt )

我们同意应该允许“this.privateInt”:您正在从消息“equals”已发送到的类 Test 的实例中访问它。

不太清楚“t.privateInt”是否应该可见,因为 t 是类 Test 的一个单独实例,我们没有在它的 equals 方法中执行。然而 java 允许这样做,因为两个对象(t 和 this)属于同一个类 Test 并且可以看到彼此的私有(private)成员。

关于Java 私有(private)字段可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/312168/

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