Java中私有字段的可访问性

时间:2015-12-11 10:14:26

标签: java inheritance

我知道如果类的实例变量是private,那么对象不会直接访问它。

但是在下面的代码中,正在发生这样的事情,代码运行正常!

b如何直接访问长度,宽度和高度?

public class Box {
    private int length,breadth,height;
    Box(int a,int b,int c){
        length=a;
        breadth=b;
        height=c;
    }
    Box(Box b){
        length=b.length;            //These lines!
        breadth=b.breadth;
        height=b.height;
    }
    int volume(){
        return length*breadth*height;
    }
}

public class BoxWeight extends Box{
    public int weight;
    BoxWeight(int a,int b,int c,int d){
        super(a,b,c);
        weight=d;
    }
    BoxWeight(BoxWeight b){
        super(b);
        weight=b.weight;
    }
}
class apples
{
    public static void main(String[] args)
    {   
        BoxWeight mybox1=new BoxWeight(10,20,30,40);
        BoxWeight clone=new BoxWeight(mybox1);
        System.out.println(mybox1.volume()+"...."+mybox1.weight);
        System.out.println(clone.volume()+"...."+clone.weight);
    }
}

4 个答案:

答案 0 :(得分:4)

因为参数类型相同。在java中,对象可以访问相同类型的其他对象的私有成员。因此,在这种情况下,Box可以访问Box类的任何私有成员,即使在不同的对象中也是如此。

答案 1 :(得分:1)

private表示字段(或内部类或方法)在类外部不可见(对任何其他类型而言)。但由于b属于同一类型Box,因此此限制不适用。

答案 2 :(得分:0)

Private 其他类无法访问; b也属于Box类型,因此它位于自己的家中!

答案 3 :(得分:0)

简单地说,Box对象可以访问Box类中Box 的私有。