说关键字" private"是什么意思?在班级是私人的吗?

时间:2017-08-03 19:21:36

标签: java class private comparable

我正在阅读的一篇文章说,关键字private表示方法或变量在类级别是私有的,而不是对象级别。

在像这样的代码块中有意义:

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

澄清:

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

3 个答案:

答案 0 :(得分:3)

  

我正在阅读的一篇文章说,关键字private代表一种方法或   变量在类级别是私有的,而不是对象级别。

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

您可以参考JLS带来有关私有修饰符的信息:

  

第6章名称

     

<强> 6.6.1。确定可访问性

     

...成员或构造函数被声明为私有,访问权限是   当且仅当它出现在顶层的主体内时才被允许   包含成员或的声明的类(第7.6节)   构造

关于:

  

所以我的意思是,相同类型的对象可以访问每个   其他没有访问方法的私有字段?

事实上。

它与规范相当一致 它不会将private成员的访问权限仅限于当前实例 因此,您可能会认为此限制不存在,因此您可以为当前实例或引用当前类的任何变量调用private方法。
当然在静态中也是如此,例如实例上下文。

作为旁注,您还应该考虑级别访问:类和实例 private static修饰符表示方法或变量在类级别是私有的。因此,您不需要任何实例来引用它 虽然private修饰符(没有static修饰符)表示方法或变量在实例级别是私有的。 所以你需要一个实例来引用它。

答案 1 :(得分:1)

  

所以我的意思是,相同类型的对象可以访问每个   其他没有访问方法的私有字段?

是的,他们可以。

Java中的访问修饰符与Class&#39; es有关,与实例无关。 documentation

答案 2 :(得分:0)

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

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

如果变量或方法是公共的,那么其他类可以访问它。

看看这个网站它可以帮助你它肯定帮助了我。

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