我定义了一个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
中拥有私人访问权限。
我在编码时感到困惑,出了什么问题?
答案 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)
答案 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中访问