62,614
社区成员
发帖
与我相关
我的任务
分享
class P{
protected int a;
public P(){}
public P(int a){
this.a = a;
}
}
class C extends P{
public int b;
public C(){}
public C(int a,int b){
super(a);
this.b = b;
}
public void fun(){
a++;
P p = new P(10);
System.out.println("C.a= " + a);
System.out.println("P.a= " + p.a);
}
}
public class Demo {
public static void main(String[] args) {
C c = new C(100,200);
c.fun();
}
}
P p = new P(10);
的p与当前C类的关系是从属,即常说的has-a,p与C类的对象并没有继承关系,自然也就没有访问权限了。
正确的写法是什么,你应该使用this或者super,即你打印那个代码改成 System.out.println(this.a);//或者super.a
。
最后补充一点,如果你把P中的a属性声明为static的,那么你报错那里同样是可以通过P.a访问到的,因为他们的类也是有继承关系的,类变量自然有访问权限。