关于构造器调用顺序
来源:互联网 发布:ni数据采集卡如何使用 编辑:程序博客网 时间:2024/06/06 03:26
http://zhidao.baidu.com/link?url=yaeRyr0If99iZIq7vSKwYJLqEbXQaekYzMSytH39CY8k6B0KNNbpUwwLrydPptG6PnrjYMcgtrijMuds0eviXq
如题,看一下下面的程序,谢谢啦package net.chapter1;class AA{ void draw(){ System.out.println("AA.draw()"); } AA(){ System.out.println("AA() before draw()"); draw(); System.out.println("AA() after draw()"); }}public class GouZaoDraw extends AA{ private int i=1; GouZaoDraw(int i){ this.i=i; System.out.println("GouZaoDraw :"+this.i); } void draw(){ System.out.println("GouZaoDraw: "+i); } public static void main(String[] args){ new GouZaoDraw(5); }}/*输出结果为:AA() before draw()GouZaoDraw: 0AA() after draw()GouZaoDraw :5我好奇的是AA的构造函数中调用的 draw()为什么是被覆盖后的draw?按从基类到导出类的顺序,draw不是应该还没被覆盖的吗?哪位达人帮忙解答一下?谢谢先!*/
1.所有的属性取决于编译时类型; 2.所有的静态方法取决于编译时类型; 3.所有的普通方法取决于运行时类型。 解释:你的draw方法没用用static修饰,属于普通方法,那么就取决于运行时类型。而你main函数中运行时的类型为GouZaoDraw,所以AA的构造函数中调用的draw()就是被覆盖后GouZaoDraw中的draw()。
new 一个对象的 执行过程是 1.父类的静态成员变量初始化(按变量声明顺序) 2.父类的静态代码块执行(按代码块声明顺序) 3.子类的静态成员变量初始化(按变量声明顺序) 4.子类的静态代码块执行(按代码块声明顺序) 5.父类的实例变量初始化(按变量声明顺序) 6.父类的构造器 7.子类的实例变量初始化(按变量声明顺序) 8.子类的构造器
- 关于构造器调用顺序
- 构造器调用顺序
- 构造器调用顺序
- 关于构造函数的调用顺序
- 关于构造函数的调用顺序
- 关于构造函数的调用顺序
- 关于构造函数的调用顺序
- 构造器的调用顺序
- java 构造器调用顺序
- 构造器的调用顺序
- 构造器的调用顺序
- 构造器的调用顺序
- 构造器的调用顺序
- 构造器的调用顺序
- 构造器的调用顺序
- 构造器的调用顺序
- 继承树的构造器调用顺序
- java构造器的调用顺序
- c语言中的字符串
- opengl 开发笔记-绘制图形(图元)
- HttpServlet
- javaee两个重定向
- 将aaaa替换成aaba
- 关于构造器调用顺序
- 字符串的长度
- 设置标签属性disabled和readonly
- C++宽字符处理函数函数与普通函数对照表
- 北邮人论坛求职版面:各种经验总结
- iOS开发之----------调用打电话、发短信、开网址
- javaBean与jsp
- Apache Avro 与 Thrift 比较
- sql语句包含的四种语言类别的语句