当我尝试读取私有字段时,为什么编译器不会给我错误?

时间:2015-03-26 21:23:27

标签: java

我有一个班级

class Box {
    private double width;
    private double height;
    private double depth;

    Box(Box ob) {
        width = ob.width;
        height = ob.height;
        depth = ob.depth;
    }
}

此课程已编译。但是我堆叠 - 为什么?!我有私人字段!

为什么我可以访问私有字段

3 个答案:

答案 0 :(得分:4)

来自this tutorial page

  

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

您正在访问同一班级Box中的字段。

答案 1 :(得分:2)

私人并不意味着只有对象可以访问其私人成员,这意味着可以。因此,在您的情况下,Box类的任何对象都可以访问任何其他Box对象的所有私有成员,只要它具有对它的引用。

答案 2 :(得分:0)

因为这些私人领域只对外部世界隐藏 - 这意味着对于课外。在这个类中,任何非静态成员(即非静态方法,初始化块或构造函数)都可以直接访问它们

要从static类中的静态方法访问这些(非Box)私有成员,您必须创建一个box类的实例,并且在使用getter方法之后,您可以访问它们。

public static void methodInsideBox(){
   Box b = new Box(Box b);
   //using getter method
   double width = getWidth(b);
}