Java构造函数调用和更改父类实例变量的值

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;//

这里是第三行,当我打印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;//
        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@AnujPatel
ppp
rrr
引用了不同的对象。仅针对
rrr
引用的对象,您将
p
初始化为20。但当我主要打印ppp.p时,它给我的答案为0,如果您为真,则答案必须为20
rrr
ppp
是两个不同的实例。因此,每个都有自己的
this.p
rrr
继承其超类的
p
属性,
ppp
拥有自己的
p
。这就是继承的效果。每个
Raw1
实例也是一个
Pparent
this.p = p;