博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个继承了抽象类的普通类的执行顺序
阅读量:6956 次
发布时间:2019-06-27

本文共 1051 字,大约阅读时间需要 3 分钟。

今天看《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.

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

转载于:https://www.cnblogs.com/lijingran/p/8823921.html

你可能感兴趣的文章
C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");
查看>>
Targeted Server in Myeclipse
查看>>
将指定路径下文件全部删除,复制并移动整个文件夹啊
查看>>
掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
查看>>
Java 类的继承详解
查看>>
如何知道btree树的高度
查看>>
.NET(C#)主流的ORM框架
查看>>
20131113
查看>>
android获取一个用于打开Word文件的intent
查看>>
socket编程
查看>>
浏览器渲染原理解析
查看>>
搭建个人网站需要的三个步骤
查看>>
HTML5 Canvas彩色小球碰撞运动特效
查看>>
matlab建立双坐标
查看>>
务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因
查看>>
Linux操作命令(六)
查看>>
1、压滤机工作原理
查看>>
设计模式学习总结-桥接模式(Bridge Pattern)
查看>>
数组参数和指针参数实例
查看>>
halcon算子翻译——copy_image
查看>>