Java 班级和私人成员

Java 班级和私人成员,java,class,private,Java,Class,Private,为什么我可以访问methodA中的name变量?我在这里很困惑,有人能解释一下吗?因为您是从它的私有范围访问它的 您的私有实现和数据将是私有的,并且可以在作用域中访问,例如它们在其中声明的类。因为您已从其私有的作用域中访问它 您的私有实现和数据将是私有的,并且可以在作用域中访问,例如,它们已在其中声明的类。您可以访问它,因为methodA是类MC的一部分。类中的每个方法都可以访问当前实例和任何其他实例中该类的私有数据成员。只有其他类不能。例如: class MC { private S

为什么我可以访问methodA中的name变量?我在这里很困惑,有人能解释一下吗?

因为您是从它的私有范围访问它的


您的私有实现和数据将是私有的,并且可以在作用域中访问,例如它们在其中声明的类。

因为您已从其私有的作用域中访问它

您的私有实现和数据将是私有的,并且可以在作用域中访问,例如,它们已在其中声明的类。

您可以访问它,因为methodA是类MC的一部分。类中的每个方法都可以访问当前实例和任何其他实例中该类的私有数据成员。只有其他类不能。例如:

class MC {

    private String name;

    void methodA(MC mc){
        System.out.println(mc.name);
    }

}
这里有一些关于这个主题的官方文档:

您可以访问它,因为methodA是MC类的一部分。类中的每个方法都可以访问当前实例和任何其他实例中该类的私有数据成员。只有其他类不能。例如:

class MC {

    private String name;

    void methodA(MC mc){
        System.out.println(mc.name);
    }

}
以下是有关此主题的一些官方文档:

因为private不适用于对象,所以它适用于类。如果将private应用于该对象,那么您的直觉是正确的:MC.methodA可以访问this.name,但它不能访问MC.name,因为MC是另一个MC对象

但是,可见性修饰符的一个微妙规则是,它们控制该类中的任何代码对该类的其他对象的成员的访问。因此,MC类中的所有代码都可以访问MC类型的所有对象的私有名称字段。这就是为什么MC.methodA可以访问MC.name其他MC对象的名称,而不仅仅是它自己的名称

编辑:Java语言规范的相关部分是:

否则,如果该成员或构造函数被声明为私有,则仅当访问发生在包含该成员或构造函数声明的顶级类的主体内时,才允许访问

因为private不适用于对象,所以它适用于类。如果将private应用于该对象,那么您的直觉是正确的:MC.methodA可以访问this.name,但它不能访问MC.name,因为MC是另一个MC对象

但是,可见性修饰符的一个微妙规则是,它们控制该类中的任何代码对该类的其他对象的成员的访问。因此,MC类中的所有代码都可以访问MC类型的所有对象的私有名称字段。这就是为什么MC.methodA可以访问MC.name其他MC对象的名称,而不仅仅是它自己的名称

编辑:Java语言规范的相关部分是:

否则,如果该成员或构造函数被声明为私有,则仅当访问发生在包含该成员或构造函数声明的顶级类的主体内时,才允许访问


我建议阅读:。我建议阅读:。我怀疑问题是,为什么private不限制您仅在此处访问字段?我不认为范围是解释这一点的最佳概念。用可见性来解释它确实更好,就像在中一样。我怀疑问题是,为什么private不限制您仅在这个字段中访问?我不认为范围是解释这一点的最佳概念。使用可见性(如中所示)可以更好地解释它。