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

代码解析

子类

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装载顺序(由低向上)的加载方式,执行时先执行父类中的实例化,和其中的内容,在执行子类中的内容

 

原文地址:https://www.cnblogs.com/hwaggLee/p/4491111.html