Java继承和方法重写程序

Java继承和方法重写程序,java,inheritance,overriding,Java,Inheritance,Overriding,我有以下关于继承和方法重写的练习,问题是为什么父类中的“initialize()”方法中的“System.out.println(f1)”是用param“0”调用的,需要做什么才能用param“6”调用。请帮助我理解它。提前谢谢 public class Solution { public static void main(String[] args) { new B(6); } public static class A { private int f1 = 7;

我有以下关于继承和方法重写的练习,问题是为什么父类中的“initialize()”方法中的“System.out.println(f1)”是用param“0”调用的,需要做什么才能用param“6”调用。请帮助我理解它。提前谢谢

public class Solution {
public static void main(String[] args) {
    new B(6);
}

public static class A {
    private int f1 = 7;

    public A(int f1) {
        this.f1 = f1;
        initialize();
    }

    protected void initialize() {
        System.out.println(f1);
    }
}

public static class B extends A {
    protected int f1 = 3;

    public B(int f1) {
        super(f1);
        this.f1 += f1;
        initialize();
    }

    protected void initialize() {
        System.out.println(f1);
    }
}

}无法重写Privare方法。您可以在child中编写该方法,但实际上它不会重写

来自Java语言规范

请注意,在这些术语的技术意义上,私有方法不能隐藏或重写。这意味着子类可以在其一个超类中声明具有与私有方法相同签名的方法,并且不要求此类方法的返回类型或抛出子句与超类中私有方法的返回类型或抛出子句具有任何关系


未调用参数值为0的父方法。如果可以看到父级的构造函数正在重写值
this.f1=f1
f1
的值将为6。因此,输出将为6和9。

初始化
没有任何参数。。。在
B
中不能重写它,因为它是一个私有方法。老实说,目前还不清楚您期望的是什么以及为什么,但事实上,您有两个同名字段只会增加混乱。感谢JLS链接,它不仅对本练习有很大帮助!