经典面试题(1)

来源:互联网 发布:游戏服装设计软件 编辑:程序博客网 时间:2024/06/15 09:05
请给出以下程序段中Test类的输出答案:
public class A {public A(){init();}protected void init(){}public void print(){System.out.println("2");}}
public class B extends A {private String b1=null;protected void init(){this.b1="0";print();}public void print(){System.out.println(b1);}}
public class Test {public static void main(String[] args) {A a=new B();a.print();}}
答案:

0null

说明:
A a =new B();当这句代码执行的时候,会先调用父类A的构造函数,在A类的构造方法中调用init()方法,此时发现子类重写了init()方法,所以直接调用子类的init()方法,调用子类init()方法时,b1赋值为"0",所以打印了0,此时父类A对象构造完毕,然后开始构造子类B对象,先对字段b1赋值为null,再调用子类无参的构造函数。至此,A a =new B();执行完毕,所以b1的值为null。