为什么父类调用的是子类的方法

 class SuperClass{
    public SuperClass()
    {
        System.out.println("父类构造器");
    }
    {
        System.out.println("父类代码块");
    }
    static
    {
        System.out.println("父类静态代码块");
    }
    public static String fieldSuperA = printStaticField();
    public String fieldSuperB = printCommonField();
    static String printStaticField()
    {  
        System.out.println("父类静态成员变量A初始化");  
        return "";  
    }  
    String printCommonField()
    {  
        System.out.println("父类实例变量B初始化");  
        return "";  
    }  
} 

class SubClass extends SuperClass{
    public static String fieldSubA = printStaticField();
    public String fieldSubB = printCommonField();
    public SubClass(){
        System.out.println("子类的构造器");
    }
    {
        System.out.println("子类代码块");
    }
    static{
        System.out.println("子类静态代码块");
    }
    static String printStaticField(){  
        System.out.println("子类静态成员变量A初始化");  
        return "";  
    }  
    String printCommonField(){  
        System.out.println("子类实例变量B初始化");  
        return "";  
    }  
}

public class MemeberInitializationTest {
    public static void main(String[] args) {
        new SubClass();
    }
}

运行结果如下:

图片说明

想知道为什么会出现这种情况。

图片说明

这个就是**多态**啊,简单的说new谁就是使用谁的同名方法

因为子类的把父类的覆盖掉了 要调用父类用super

图片说明

我运行的结果是只打印了一次“子类实例变量B初始化”。不知道你是不是运行两次啊

你 new的是子类,并且没有使用super 那肯定是子类的方法了

额,是我的运行错误了。楼上说的对,new子类的时候,子类方法把父类方法给复写了,所以两次打印的都是子类里的字符

父类没有进行实例化,不能调用里面的非静态方法。只有子类进行了实例化,你可以在那两个方法上都添加static,试一试

对对对,是重写了,想错了。子类继承父类,可以使用父类的方法的。