一道Java面试题目--对象的构造
2011-11-05 22:39
369 查看
无意中遇到一道Java面试题,大致题意如下:
问程序执行的输出结果。
先说答案吧,程序运行的结果是打印了两条信息分别为:
init
I am B
啊?乍看之下是惊奇加意外呀。怎么会这样呢,能打印 "init" 说明 str = "changed";
语句是被执行过的,结果打印的 b.str 却还是 "I am B"。
程序执行 B b = new B(); 以后会初始化对象,初始化顺序为:
父类静态块初始化---->子类静态块初始化---->
父类非静态块初始化---->父类构造方法---->子类非静态块初始化---->子类构造方法。
(先静后动,先父后子)
init 方法中的赋值 str = "changed"; 是在父类的构造中执行的。
此时B的(init方法是在子类中实现的,所以是B的str)str被赋值为 "changed" .
因为先父后子的顺序,所以之后在初始化子类的对象时, B中的str 被赋值为 "I am B"。
public class Topic1{ public static void main(String[] args){ B b = new B(); System.out.println(b.str); } } class B extends A{ String str = "I am B"; public B(){ super(); } public void init(){ System.out.println("init"); str = "changed"; } } abstract class A{ String str = "I am A."; public A(){ init(); } public abstract void init(); }
问程序执行的输出结果。
先说答案吧,程序运行的结果是打印了两条信息分别为:
init
I am B
啊?乍看之下是惊奇加意外呀。怎么会这样呢,能打印 "init" 说明 str = "changed";
语句是被执行过的,结果打印的 b.str 却还是 "I am B"。
程序执行 B b = new B(); 以后会初始化对象,初始化顺序为:
父类静态块初始化---->子类静态块初始化---->
父类非静态块初始化---->父类构造方法---->子类非静态块初始化---->子类构造方法。
(先静后动,先父后子)
init 方法中的赋值 str = "changed"; 是在父类的构造中执行的。
此时B的(init方法是在子类中实现的,所以是B的str)str被赋值为 "changed" .
因为先父后子的顺序,所以之后在初始化子类的对象时, B中的str 被赋值为 "I am B"。
相关文章推荐
- 一道月薪3万的Java面试题目
- 一道面试题目【构造一个函数f(n)使得f(f(n))=-n】
- 一道Java面试题目
- 搜狗一道java题目 关于对象 synchronized 关键字作用在 int, integer
- 一道经典的面向对象题目的JAVA实现
- 执行对象java面试题目2013/5/16
- java 面试中的一道截取字符串的经典题目
- 一道Java面试题目——随想+心得
- Java面试题目总结
- 求助!java当中的一道题目。
- 面试大总结:Java搞定面试中的二叉树题目
- java面试题目
- 分享Java面试中遇到的一些经典算法题目
- 最全的java面试题目一
- 各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)
- java面试题目汇总01
- Java基础进阶_day01_(构造方法,this关键字,匿名对象)
- [转]面试java架构师的比较变态的题目
- 【LeetCode-面试算法经典-Java实现】【105-Construct Binary Tree from Preorder and Inorder Traversal(构造二叉树)】
- Java面试题目整理