说关键字 "private" 在 class 级别是私有的是什么意思?

What does it mean to say the keyword "private" is private at the class level?

我正在阅读的一个来源说关键字 private 表示方法或变量在 class 级别是私有的,而不是对象级别。

在这样一段代码中的含义:

public class Weight2 implements Comparable<Weight2>
{
   private int myPounds, myOunces;

   public Weight2()
   {
      myPounds = myOunces = 0;
   }
   public Weight2(int x, int y)
   {
      myPounds = x;
      myOunces = y; 
   }

   public int compareTo(Weight2 w)
   {
      if(myPounds<w.myPounds)
         return -1;
      if(myPounds>w.myPounds)
         return 1;
      if(myOunces<w.myOunces)
         return -1;
      if(myOunces>w.myOunces)
         return 1;
      return 0;
   }
}

一个 Weight2 对象可以在没有访问器方法的情况下访问另一个 weight2 对象的私有字段......而只是说 w.myPounds.

澄清:

我想知道对象可以从哪里访问不同对象的私有数据。是否仅来自 class 内?或者这可以通过驱动程序完成吗?

A source I am reading says that the keyword private means a method or variable is private at the class level, not the object level.

我不知道你的消息来源。没有错,但也不清楚。

您可以参考 JLS,它提供了有关 private 修饰符的信息:

Chapter 6. Names

6.6.1. Determining Accessibility

... the member or constructor is declared private, and access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor.

关于:

So what I mean to ask is, can objects of the same type access each other's private fields without accessor methods?

确实如此。

而且比较符合规范
它不会将对 private 成员的访问仅限于当前实例。
因此,您可能会认为此限制不存在,因此您可以为当前实例或引用当前 class.
的任何变量调用 private 方法 在实例上下文中当然是静态的。


附带说明一下,您还应该考虑访问级别:class 和实例。
private static 修饰符表示方法或变量在 class 级别是私有的。所以,你不需要任何实例来引用它。
private 修饰符(没有 static 修饰符)表示方法或变量在实例级别是私有的。 所以你需要一个实例来引用它。


不完全确定你的问题到底是什么。不过我会给你一个基本的总结,我认为你想要什么。

如果变量或方法是私有的,则只能在它所在的 class 内访问或使用它。

如果一个变量或方法是 public 那么它可以被其他 class 访问。

看看这个网站它可能对你有帮助它当然对我有帮助。

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

So what I mean to ask is, can objects of the same type access each other's private fields without accessor methods?

是的,他们可以。

Java 中的访问修饰符是关于 Class 的,而不是关于实例的。 https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html