Java基础-父类-子类执行顺序

时间:2021-03-27 12:25:22

代码解析

子类

package com;

/**
* 子类
* @author huage
*
*/
public class Test extends Test1{ public static void main(String[] args) {
new Test();//测试子类和父类重载关系和调用关系
} public Test() {
System.out.println("test");
test("Test");
super.test("Test");//父类中的方法被子类重载,所以必须super才能调用的父类中的方法执行
} /**
* 重载父类中的test方法
*/
public void test(String name) {
System.out.println("who:"+name+";test:test");
}
/**
* static方法不调用不会执行
*/
public static void test1() {
System.out.println("test static void ");
}
}

父类

package com;

/**
* 父类
* @author huage
*
*/
public class Test1 {
public Test1() {
System.out.println("1");
//被子类重写后,实例化子类时调用的为子类中的方法
test("Test1");
this.test("Test1");
//test1();
} /**
* 当实例化的对象为子类时,子类中有重写此方法时,则在本来(父类)调用的为被子类重写的方法,子类调用也为子类重写的方法
* 如子类中要调用父类中的方法需要使用super来调用
* 自己本类中无法调用
*/
public void test(String name) {
System.out.println("who:"+name+";1:1");
} /**
* static方法不会被重写/覆盖,但是在子类中可以有相同的方法,在调用中自己this调用的是自己的方法
*/
public static void test1() {
System.out.println("test1 static 111");
} /**
* final方法不能被重写/覆盖,子类中不能有相同的方法(方法名,返回类型,参数相同的情况)
*/
public final void test2() {
System.out.println("test2 final 11111 ");
}
}

执行情况

1
who:Test1;test:test
who:Test1;test:test
test
who:Test;test:test
who:Test;1:1

总结说明 :

子类继承父类,当实例化子类时,根据jvm装载顺序(由低向上)的加载方式,执行时先执行父类中的实例化,和其中的内容,在执行子类中的内容