Java 当类的对象本身不能访问时,这个关键字如何访问类的私有成员

Java 当类的对象本身不能访问时,这个关键字如何访问类的私有成员,java,Java,我对这个关键字的概念有点怀疑让我给你举个例子,通过这个例子我可以解释它 public class InheritanceInJava { public static void main(String args[]) { A obj = new A(4,5); obj.num3 = 4; //using object to access private member of class which is not possible } class A { private int num1;

我对这个关键字的概念有点怀疑让我给你举个例子,通过这个例子我可以解释它

public class InheritanceInJava
{
 public static void main(String args[])
 {
 A obj = new A(4,5);
 obj.num3 = 4; //using object to access private member of class which is not possible
 }
class A
{
 private int num1;
 private int num2;
 private int num3;
 A(int num1, int num2)
 {
 this.num1 = num1; //this keyword can access num1 in order initalize value 
 this.num2 = num2;
 }
} 
现在,根据this关键字的定义,this关键字可用于引用实例方法或构造函数中当前对象的任何成员

由于这是对调用方法或构造函数的当前对象的引用,并且由于类的对象本身无法访问类的私有成员,因此该关键字如何访问它

如果我们看看上面的例子:

this->obj//这是指调用构造函数或方法的当前对象


如果obj.num3=4或obj.num1=6无效,那么这个.num1=num1如何有效

privateaccess修饰符将这些变量的访问限制在顶级类内部。由于您正在从顶级类内部调用
this
(这是必须的),因此您可以访问这些变量


我说“顶级”类而不仅仅是类来覆盖嵌套类的情况(外部类可以访问其内部类的私有字段)。

private访问修饰符将这些变量的访问限制在顶级类内部。由于您正在从顶级类内部调用
this
(这是必须的),因此您可以访问这些变量

我说的是“顶级”类,而不仅仅是类,以涵盖嵌套类的情况(外部类可以访问其内部类的私有字段)。

根据java文档:

private修饰符指定只能在成员自己的类中访问该成员

根据java文档:

private修饰符指定只能在成员自己的类中访问该成员


您需要记住,如果对象是在类中创建的,那么它可以从类中很好地访问私有数据,私有-公共限制不适用于同一类的成员

您需要记住,如果对象是在类中使用创建的,那么它可以很好地从类中使用访问私有数据,私有-公共限制不适用于同一类的成员

在定义私有变量的类中定义了“A”构造函数。您的代码所说的是:


有一个具有私有变量的“A”类(只有“A”可以访问它们)。当在“A”类之外构造时,“A”对象可以授予更改这些私有变量的临时权限,因为这是在构造函数中定义的。此后的任何时候,都不能更改这些私有变量

在定义私有变量的类中定义了“A”构造函数。您的代码所说的是:


有一个具有私有变量的“A”类(只有“A”可以访问它们)。当在“A”类之外构造时,“A”对象可以授予更改这些私有变量的临时权限,因为这是在构造函数中定义的。此后的任何时候,都不能更改这些私有变量

一个“A”对象可以授予更改这些私有变量的临时权限,因为这是在构造函数中定义的。此后任何时候,这些私有变量都无法更改。“
什么?当创建“A”对象时,它在构造函数中定义了可以分配给其私有变量的内容。因此,一种思考方法是:在类之外,您有机会定义“A”对象,并且仅一次更改私有变量的内容(对于您创建的对象)。但构造函数不在类的外部?但创建的对象不在“A”类的外部。因此,无法将私有变量分配给。
A对象可以授予临时权限来更改这些私有变量,因为这是在构造函数中定义的。此后,任何时候都不能更改这些私有变量什么?当一个“A”对象被创建时,它在构造函数中定义了一个你可以分配给它的私有变量。因此,一种思考它的方法是:在类之外,你有机会定义一个“A”对象,并且,仅一次,改变私有变量是什么(对于你创建的那个对象)。但是构造函数不在类之外?但是创建的对象在“A”类之外。因此,无法将私有变量赋值给。这不是很准确。私有成员可以访问包含该成员的顶级类中的任何位置,因此,例如,两个嵌套类可以访问彼此的私有成员bers。如果你想更具体一些,可以。我会在中编辑。@chrylist这不太准确。私有成员可以在包含该成员的顶级类中的任何位置访问,因此例如,两个嵌套类可以访问彼此的私有成员。如果你想更具体一些,可以。我会在中编辑。@chrylisn simple术语,它表示当前类的实例。使用它,您不需要创建对象来访问任何类成员,除非它是静态的。根据您的问题,您的构造函数`A(int num1,int num2)`正在将值赋值给
num1,num2
,其对象类似于将值插入
num1,num2
,这与
无关(仅供参考)如果您想检查,那么您必须更改构造函数的参数名称并分配给当前类实例,而不使用此选项。简单来说,这表示当前类的实例。使用此选项,您不需要创建对象来访问任何类成员,除非它是静态的。根据您的问题,您的构造函数`A(int num1,int num2)`正在给
num1,num2
赋值,其对象类似于将值插入
num1,num2
,而这与
无关(仅用于参考