我有关于继承和方法覆盖的以下练习,问题是为什么' System.out.println(f1)'在' initialize()'使用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);
}
}
}
答案 0 :(得分:0)
不能覆盖Privare方法。您可以在儿童中编写该方法,但实际上它不是重写的。
来自Java语言规范JLS。
请注意,在这些术语的技术意义上,无法隐藏或覆盖私有方法。这意味着子类可以在其一个超类中声明一个与私有方法具有相同签名的方法,并且不要求这种方法的返回类型或throws子句与该方法中的私有方法具有任何关系。超类。
您的父方法不会被调用参数值为0.如果您可以看到父的构造函数覆盖值this.f1=f1
,则f1
的值将为6.因此输出将为6和9