1、首先
{
System.out.println("pirnting mystat in mystat class.");
}每次调用类mytest时都会自动初始化!2、子类的public void mytest() 方法覆盖父类的public void mytest() 方法3、public static void mystat()方法不能被覆盖,只能被隐含!所以,执行mytest mt = new Test();后,首先调用的是System.out.println("pirnting mystat in mystat class.");mt.mytest();调用的是Test类的方法。
mt.mystat();调用的是mytest类的方法。

解决方案 »

  1.   

    楼上说得对。
    public static void mystat(){} {
        System.out.println("printing mystat in test class.");
    }
    应该分解为下面的两个步骤:
    //1、一个没任何输出的函数
    public static void mystat() {
    }
    //2、下面在类实例化的时候就实执行
    {
        System.out.println("printing mystat in test class.");
    }
    再有就是子类没有覆盖父类的static方法,mytest mt (注意不是test mt),当父类的static方法没有被覆盖的时候就调用了父类的static方法。
      

  2.   

    一:在此情况下的输出为:
    printing mystat in mystat class.
    printing mytest in test class.这是因为你用父类new子类时,首先会执行的是要被实例化的父类的语句:{ //①
    System.out.println("pirnting mystat in mystat class.");
    }
    因为他不在方法体内
    mt.mytest()执行的是子类的,因为你new的是子类
    而mt.mystat()是静态的
    所以他调用的仍然是父类的
    而父类的mystat方法是个空的后面的也是同样的道理
      

  3.   

    但是为什么在语句变为
    public static void mystat() { //①
    System.out.println("pirnting mystat in mystat class.");
    }
    的时候,结果先输出的确是:
    printing mytest in test class.在先呢?
    printing mystat in mystat class是属于这个static函数的输出,应该在类初始化的时候就先输出了啊, 为什么会在类成员函数之后才输出啊 ?还有就是子类里面的mystat函数和父类里面的mystat函数是什么关系啊?
    重载还是什么呢?