浏览 3004 次
锁定老帖子 主题:Java 子类对象实例化 面试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-28
子类对象实例化面试题,拿来给大家分享下了,希望指点哦 package com.gem.j2SE03; abstract class A { private int x = 100; public A(){ this.print(); } public abstract void print(); } class B extends A { private int x = 200; public B(int x){ this.x = x; } public void print(){ System.out.println("x=" + x); } } public class TestJava { private void mian() { A a = new B(20); } } 答案:x=0 子类的实例化过程:应该是先调用父类中的构造方法,然后再执行子类中的自己的构造方法了,查了资料才看到的,学了不少哦
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-29
A a = new B(20);
这个时候a已经向上转型,只能看成A类型,不能看成B类型. A的x,与B的x,作用范围不一样. 楼主:先调用父类中的构造方法,然后再执行子类中的自己的构造方法...这个是对的,就是这样. A a =这个时候 x的时候是100,但是A构造器,调度print(); 由于B实现A类方法,这个时候,又会去调度B的print(); 但是这个时候并没有调度到B的构造器,导致B的x的没有赋值200,所以x=0; A a = new B(20); 的执行顺序:A的构造器,A的print()方法; B的print()方法;B的构造器.(而调度B的构造器才会赋值成功) 建议在把构造器在加一下下面语句,就会明白他们真正执行顺序. public A(){ this.print(); System.out.println("x=" + x); } public B(){ this.print(); System.out.println("x=" + x); } |
|
返回顶楼 | |
发表时间:2009-07-29
有道理,又学习了新东西了,谢谢,大家共进步
|
|
返回顶楼 | |
发表时间:2009-08-05
进一步学习了子类与父类间的关系
|
|
返回顶楼 | |