我是学生,学习Java。我知道,protected
表示从children
或the same package
访问。这里我们继承并重写一个受保护的方法。在这样一个动作之后,无论基类想调用它自己的方法,它都会从子类中调用新的被覆盖的方法。我一直在调试这一段时间,并用注释标记执行顺序。但我不明白为什么当我从基类构造函数中明确调用基类方法时,它不会调用它?为什么从基类调用方法调用子方法?
public class Solution {
public static void main(String[] args) {
new B(); // first
}
public static class A {
public A() {
initialize(); // third
}
protected void initialize() {
System.out.println("class A"); // we never go here
}
}
public static class B extends A {
public B() {
super(); // second
initialize(); // fifth
}
protected void initialize() {
System.out.println("class B"); // fourth, sixth
}
}
}
这是从一个网站上的任务,所以基本的解决方案是将initialize
方法的访问修饰符改变从protected
到private
。但我仍然不明白为什么会出现问题。
我认为这只是调用覆盖的方法,因为你是从覆盖它的类调用超类,所以它总是会使用这个方法从B类? –
这是整个重写... –