关于访问说明符

时间:2013-12-23 15:25:30

标签: java object access-modifiers

我定义了一个Class Base

class Base  
{  
    private int i;  
    Base(int i)  
    {  
        this.i = i;  
    }  
}  

因此Base类的对象可以访问私有变量。

class BaseDemo  
{  
        public static void main(String[] args)  
        {  
            Base objBase = new Base(10);  
            System.out.println(objBase.i);  
        }  
}  

但它给了我一个编译器错误,我在Base中拥有私人访问权限。

我在编码时感到困惑,出了什么问题?

7 个答案:

答案 0 :(得分:4)

请参阅Controlling Access to Members of a Class

Modifier    Class   Package Subclass    World
---------------------------------------------
public      Y      Y        Y           Y
protected   Y      Y        Y           N
no modifier Y      Y        N           N
private     Y      N        N           N

您应该为该字段添加 getter 。这是encapsulation的全部概念。您应该从外部隐藏您的实现,并提供 setters getters

答案 1 :(得分:2)

问题很简单。你有变量“i”私有,你需要一个pojo(得到y set)public来使用变量“i”。

例如:



    public int getI() {
       return this.i;
    }


在实施中使用:



    objBase.getI();


PDT:对不起我的英语我说西班牙语

答案 2 :(得分:1)

private方法和变量只能在类中访问。不在课堂外,即使您创建了无法访问它们的实例。

来自official docs

  

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

答案 3 :(得分:1)

BaseDemo不是Base的实例,但即使它是Base的孩子,您也会将字段i标记为私有。只有班级Base可以访问它,这就是private的含义。如果是protected,则Base的实例或Base的子类可以访问它。

答案 4 :(得分:1)

我是Base类中的私有属性,因此您无法直接访问。这是面向对象编程概念之一。

你可以为它创建getter

在基类

public int getI(){
    return this.i
}

在BaseDemo中你可以调用它

 System.out.println(objBase.getI());

答案 5 :(得分:1)

您可能希望定义一个getter方法来访问类BaseDemo之外的变量。

public int getI(){
   return i;
}

也许这对你有用:

等等。

答案 6 :(得分:0)

错误是因为您不知道访问说明符的规则,私有访问说明符用于使您的变量只能在同一个calss中访问