Java构造函数调用和更改父类实例变量的值
这里是第三行,当我打印super.p变量的值时,它打印为20。但是我没有初始化super.p的值,我只是初始化了这个.p的值,所以我应该得到值0,但是我得到值20。谁能解释一下怎么做!!!一,Java构造函数调用和更改父类实例变量的值,java,constructor,this,super,Java,Constructor,This,Super,这里是第三行,当我打印super.p变量的值时,它打印为20。但是我没有初始化super.p的值,我只是初始化了这个.p的值,所以我应该得到值0,但是我得到值20。谁能解释一下怎么做!!!一, public class Pparent{ int p; } public class Raw1 extends Pparent { int c; Raw1(int c, int p){ this.c = c; this.p = p;//
public class Pparent{
int p;
}
public class Raw1 extends Pparent {
int c;
Raw1(int c, int p){
this.c = c;
this.p = p;//
System.out.println(this.p);
System.out.println(this.c);
System.out.println(super.p);
//super.p = p;//
System.out.println(this.p);
// so can we say that only reference of parent class is getting inside child class
}
public static void main(String[] args) {
Raw1 rrr = new Raw1(1,20);
Pparent ppp = new Pparent();
System.out.println(ppp.p);
System.out.println(rrr.p);
}
}
初始化Pparent
类的p
实例变量的值,因为子类Raw1
没有隐藏父类变量的p
实例变量,并且父类变量可由子类访问,因为默认情况下它是包私有的
如果将
p
变量的访问权限更改为private
,则代码将无法通过编译。您的p属性具有默认访问级别。所以,当您调用子构造函数时,直接设置属性 这个.p是super.pAs你是这么说的。p=p初始化Pparent变量的值,但当我在主方法l中打印ppp.p时,它给我的输出是0,如果你是对的,那么它应该给我们ans作为20@AnujPatelppp
和rrr
引用了不同的对象。仅针对rrr
引用的对象,您将p
初始化为20。但当我主要打印ppp.p时,它给我的答案为0,如果您为真,则答案必须为20rrr
和ppp
是两个不同的实例。因此,每个都有自己的this.p
rrr
继承其超类的p
属性,ppp
拥有自己的p
。这就是继承的效果。每个Raw1
实例也是一个Pparent
。
this.p = p;