黑马程序员技术交流社区

标题: 问一个内部类的继承问题 [打印本页]

作者: Lex    时间: 2014-5-31 00:01
标题: 问一个内部类的继承问题
本帖最后由 Lex 于 2014-5-31 16:51 编辑

public class Extend1 {

        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
               




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2