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,试一试
对对对,是重写了,想错了。子类继承父类,可以使用父类的方法的。