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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 古月哥欠 中级黑马   /  2014-12-20 23:04  /  750 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test1 {  
    public static void main(String[] args){  
        B b=new B(0);      
        int y=b.display();  
    }  

}  
class A
{  
                public static int x=2;      
                private int y=2;           
            public A()
                {                    
                        x=x+1;  
                        show();         
        }  
                public void show()
                {  
                        System.out.println("A.x="+x);  
                }  
                public int display()
                        {  
                                return y;  
                        }  
}   
class B extends A
{        
    public B(int x)
        {  
        x=x+2;                  
        show();  
    }  
    public void show()
        {  
        System.out.println("B.x="+x);  
    }  
    public int display()
        {  
                System.out.println("B.y="+(super.display()+x));  
                return super.display()+x;          
    }  
}  

1 个回复

倒序浏览
个人感觉这个要用关于内存图的方式来说明比较好。简单说一下吧,子类建立对象的时候由于有一个隐式的super();,所以执行会跳到父类,父类有一个static的int x=2,所以x=x+1执行后x的值为3,接着执行show(),但是这里隐含了一个this.,所以调用的子类的show(),所以第一行打印的是B.x=3;接下来执行回到子类中来,又由于B b=new B(0); 中的0只是存在构造方法中的范围,所以 子类中的public void show()方法打印调用是静态中的x,所以同样的是B.x=3;而super.display()返回的是父类中私有化的y值:2,然后就是2+3的结果啦。

如果解释有误,请多多保函指正!!!

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马