public static void main(String[] args) {
// TODO Auto-generated method stub
Begin b = new Begin();
D d = b.getCar();
d.show();
}
}
class DuoTai{
String str = "I am lost!";
public void nice(){
System.out.println("I will");
}
}
interface D{
public abstract void show();
}
class Begin extends DuoTai{
String str = "haha";
private class Car extends DuoTai implements D{
public void show(){
System.out.println("oh,my God!");
System.out.println(str);
}
}
public D getCar(){
return new Car();
}
}
为什么调用show()方法,输出str是继承的str,而不是优先外部类的str,代码在内存里执行的先后顺序是怎样的?作者: jiang_ming 时间: 2014-5-31 08:12
打酱油的路过,表示同问作者: luoanjade 时间: 2014-5-31 09:26
详细的我也不知道怎么解释。内部类继承了DuoTai这个类,就继承了它的str,也就是说内部类已经存在了str,此时访问外部类的str,需要这样做:Begin.this.str作者: 海世山盟 时间: 2014-5-31 09:32
Begin b = new Begin();//因为begin是继承之一个父类,因此初始化的时候先初始化父类,那么此时的str=Lost,接下来初始化begin自己内部变量,str=haha,因此begin里面的str在初始化结束就为haha
D d = b.getCar();//这里调用了内部类,因此需要准备开始初始化内部类了,然而内部类也继承了begein,因此首先初始化Str=Lost。在这里你可以将内部类里面的Str看做是一个局部变量,因此内部类里面的局部变量str=Lost 的值覆盖了外部类begin的str=hahat的值。最终内部类的str还是Lost
d.show();//因为show方法为内部类的方法,因此它使用的是内部类里面的局部变量,因此输出的是Lost