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类的方法。
{
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类的方法。
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方法。
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方法是个空的后面的也是同样的道理
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函数是什么关系啊?
重载还是什么呢?