该关键字如何访问类的私有成员而类本身的对象不能

时间:2016-11-24 03:45:53

标签: 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;
 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;
 }
} 

现在,根据此关键字的定义,此关键字可用于从实例Method或构造函数中引用当前对象的任何成员。

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

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

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

如果,obj.num3 = 4或obj.num1 = 6无效。那么this.num1 = num1如何有效?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

  

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

"有一个' A'具有私有变量的类(只有' A'可以访问它们)。当在A' A'之外建造时。上课,一个' A' object可以赋予临时权限来更改这些私有变量,因为这是在构造函数中定义的。在此之后的任何时候,都无法更改这些私有变量。"