黑马程序员技术交流社区

标题: 输出结果为什么是B.x=3 B.x=3 B.y=5呢? [打印本页]

作者: 古月哥欠    时间: 2014-12-20 23:04
标题: 输出结果为什么是B.x=3 B.x=3 B.y=5呢?
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;          
    }  
}  


作者: 青衫禅客    时间: 2014-12-21 00:04
个人感觉这个要用关于内存图的方式来说明比较好。简单说一下吧,子类建立对象的时候由于有一个隐式的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的结果啦。

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






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