这是java中'private'访问修饰符的正确定义吗?

时间:2014-11-19 00:18:14

标签: java

根据link,定义为The private modifier specifies that the member can only be accessed in its own class.

但是下面的代码能够访问子类中超类的私有成员item

class SuperType {
    private int item;
    public void setItem(int item){
        this.item = item;
    }
    public int getItem(){
        return item;
    }
}

public class SubType extends SuperType{
    public static void main(String[] args){
        SubType s = new SubType(); 
        s.setItem(2);
        System.out.println(s.getItem());

    }
}

还可以理解s.item不起作用,因为item不是SubType类的成员。

我如何理解这个定义?

3 个答案:

答案 0 :(得分:4)

访问修饰符会影响对该成员的直接访问权限。

SubType可以通过item getter方法间接访问public,该方法存在于SuperType中,因此可以访问private {{ 1}}成员变量。

但是item无法直接访问它,例如,如果在SubType中,这是一个错误:

SubType

答案 1 :(得分:1)

您的定义正确,并且您正在通过公共访问者和mutator访问private字段。你不能做的是,

s.item = 2;
如果itempublic,您可以使用

。此外,SubTypeSuperType的子类这一事实在这里无关紧要。每个班级都可以通过它的公共访问者(和mutator)访问item

答案 2 :(得分:0)

  1. 您使用getter和setters方法来访问/改变类中的私有成员。 getter和setter声明为" public"。

  2. 您可以扩展一个类并继承父级的私有成员以及getter和setter来访问它们。

  3. 解决方案或解决方法是使用"受保护的"访问说明符,允许您直接访问/改变类的属性,而无需任何getter和setter。使用范围仅是类和其他类的包。受保护的不需要类继承。只要这些类在同一个包中,他们就可以访问邻居的受保护成员。

  4. 过去在SO中给出了一个非常好的解释 - In Java, difference between default, public, protected, and private