A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lex 中级黑马   /  2014-5-31 00:01  /  1145 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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,代码在内存里执行的先后顺序是怎样的?

3 个回复

倒序浏览
打酱油的路过,表示同问
回复 使用道具 举报
详细的我也不知道怎么解释。内部类继承了DuoTai这个类,就继承了它的str,也就是说内部类已经存在了str,此时访问外部类的str,需要这样做:Begin.this.str
回复 使用道具 举报
  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
               
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马