标题: 一个基础面试题,求解释结果为什么会是0 [打印本页] 作者: 雷云红 时间: 2012-6-5 12:16 标题: 一个基础面试题,求解释结果为什么会是0 class Base{
private int i=2;
public Base(){
this.display();
}
public void display(){
System.out.println("the Base function i="+i);
}
}
class Derived extends Base{
private int i=22;
public Derived(){
i=222;
}
public void display(){
System.out.println("the Derived function i="+i);
}
}
public class test1 {
public static void main(String[] args) {
new Derived();
}
}
public Derived(){ //步骤2 执行子类的构造函数 但是由于子类隐含了父类的构造函数,所以转而执行父类构造函数
i=222;
}
public void display(){ //步骤6 父类调用子类的方法
System.out.println("the Derived function i="+i); //最后输出7 嘿嘿,当然子类成员变量 i 还没有赋值呢.....
}
}
public class test1 {
public static void main(String[] args) {
new Derived(); //步骤1 开始new对象
}
}
复制代码
作者: 王超 时间: 2012-6-5 12:53
从main方法开始,执行new Derived()时,调用Derived的构造方法,因为继承Base类,默认Derived构造方法第一句有:super();,继而调用Base的构造方法,
Base调用自己的display函数,因为被Derived重写,然后执行Derived的display方法,因为这时 i 还没有被赋值,所以默认是0。
故打印出“the Derived function i = 0 ”.作者: 麦田守望者0812 时间: 2012-6-5 12:58
class Base{
private int i=2;
public Base(){
this.display();
}
public void display(){
System.out.println("the Base function i="+i);
}
}
class Derived extends Base{
private int i=22;
public Derived(){
i=3;
}
public void display(){
System.out.println("the Derived function i="+i);
}
}
public class test1 {
public static void main(String[] args) {
new Derived();//调用改代码时 首先调用父类的构造函数 将调用父类中的display()函数 而子类中继承了该方法 并实现了复写 若子类没有复写该方法则可以正常打印
}
}作者: 杨永峰 时间: 2012-6-5 13:06
class Base{
private int i=2;///(2)由于父类和子类中都没有静态的变量和方法,所以new Derived() 执行之后直接到这句,父类的成员变量定义值初始化。