• 一个继承了抽象类的普通类的执行顺序


    今天看《java编程思想》抽象类那节的时候,做了一个练习题3(p171页),发现了一个很有意思的东西,一个继承了抽象类的普通类的执行顺序是怎样的呢?

    package JavaChoiceQuestion;
    
    /**
     * @Auther: 李景然
     * @Date: 2018/4/13 19:45
     * @Description:
     */
    
    
    //抽象类
    public abstract class AbstractClass {
        public static void main(String[] args){
            NotAbstractClass n=new NotAbstractClass();
            n.print();
        }
        public abstract void print();
        public AbstractClass(){
            print();
        }
    }
    
    //实现抽象类的普通类
    class NotAbstractClass extends  AbstractClass {
        private int num=1;
    
        public NotAbstractClass(){
        ...
        }
    
        public void print(){
            System.out.println(num);
        }
    }

    执行的结果是:

    0

    1

    分析:

    main函数执行的时候

    先执行main函数中的第一句:NotAbstractClass n=new NotAbstractClass();输出的是0.

    这一句的执行顺序如下:

      1、先进入到NotAbstractClass的构造函数,然后先去执行其父类的构造函数,父类的构造函数执行print()方法,但是子类实现了这个方法,所以会去执行System.out.println(num);这时的num还未进行赋值,所以此时num是默认值0.

      2、执行完父类的构造函数,会去执行子类的成员变量的初始化,这时会执行private int num=1;此时num被赋值为1,

      3、最后,执行子类构造函数中的代码...

    然后main函数执行第二句:n.print();,输出是1.

    总结,一个继承了抽象类的普通类的执行顺序是:父类的构造函数---子类成员变量的初始化---子类的构造函数

  • 相关阅读:
    C++中堆和栈的区别
    JavaScript 点击切换菜单
    正则表达式过滤掉CSS样式
    单例模式DEMO
    将来的你,一定会感谢现在努力的自己
    1066 图像过滤 (15 分)
    1076 Wifi密码 (15 分)
    1071 小赌怡情 (15 分)
    1046 划拳 (15 分)
    1086 就不告诉你 (15 分)
  • 原文地址:https://www.cnblogs.com/lijingran/p/8823921.html
Copyright © 2020-2023  润新知