根据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
类的成员。
我如何理解这个定义?
答案 0 :(得分:4)
访问修饰符会影响对该成员的直接访问权限。
SubType
可以通过item
getter方法间接访问public
,该方法存在于SuperType
中,因此可以访问private
{{ 1}}成员变量。
但是item
无法直接访问它,例如,如果在SubType
中,这是一个错误:
SubType
答案 1 :(得分:1)
您的定义正确,并且您正在通过公共访问者和mutator访问private
字段。你不能做的是,
s.item = 2;
如果item
为public
,您可以使用。此外,SubType
是SuperType
的子类这一事实在这里无关紧要。每个班级都可以通过它的公共访问者(和mutator)访问item
。
答案 2 :(得分:0)
您使用getter和setters方法来访问/改变类中的私有成员。 getter和setter声明为" public"。
您可以扩展一个类并继承父级的私有成员以及getter和setter来访问它们。
解决方案或解决方法是使用"受保护的"访问说明符,允许您直接访问/改变类的属性,而无需任何getter和setter。使用范围仅是类和其他类的包。受保护的不需要类继承。只要这些类在同一个包中,他们就可以访问邻居的受保护成员。
过去在SO中给出了一个非常好的解释 - In Java, difference between default, public, protected, and private