关于继承的问题 属性是不会被重载的,所以当你在Test中调用append方法时,它首先在test中寻找,没找到后会到父类Test1中寻找,然后执行s+=a;因为属性不能重载,所以它引用的是自己的s(Test1)。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to bhr,那为什么print不打印父类的s? 奇怪,我在jb7中跟踪调试时,s的值一直显示:Test,但最后却打印出Test1 Test.f() f() ,不知是不是一个bug? 那么Test1中的append()被Test继承了吗?如果继承了,为何append()不调用Test中的s呢? Re:奇怪,我在jb7中跟踪调试时,s的值一直显示:Test,但最后却打印出Test1 Test.f() f() ,不知是不是一个bug?你跟踪的是类Test中的s吧?但打印的是Test1中的s. 别人的回答,转载一下!回复人: illia(蓝雪) ( ) 信誉:100 2002-3-28 0:20:06 得分:10 在java中,当子类定义了与父类同名的属性变量时,即出现了子类变量对同名父类变量的隐藏。所谓隐藏就是指子类拥有两个同名变量,一个继承自父类,一个由自己定义。当子类执行继承自父类的操作时,处理的是继承自父类的变量,当执行由子类本身定义的操作时,处理就是自己定义的变量,而把继承自父类的变量“隐藏”起来。也就是说,在Derived类创建的时候,分配了两个x的空间,但是对于外部来说,它只有一个变量x。而方法的继承则和域中变量的继承不一样:当父类中一个方法被子类覆盖时,它所占用的内存空间将被完全清空,父类的方法在子类中将不复存在。Base类的对象b的创建是通过new一个Derived来完成的,因此b这个句柄指向的对象其实是Derived类的一个实例,在实例b中,内存空间中分配了两个同名的x,b.show()由于在Derived类里被覆盖了,调用的也是Derived类里面的show()方法,因此这个show()操作的是Derived类里面的x,所以值为2。而b.x=3是因为b的类型是Base,b.x是显式的调用Base类里继承的变量x,所以显示的是Base类所赋的值。 java中交换两个数的值 C盘少2个G,帮帮忙 怎样取出List中对象的值? 问个问题,小弟刚学java,菜鸟 java的静态方法问题 ***怪问题**从文件中读出字符串作为另一个文件的路径,总是失败,为何? 感受java系列视频教程 请问:怎样才能体会到使用静态(static)类成员的微妙之处? 这个正则表达式有什么问题吗? 求助~空指针异常问题 三问高手。 2000与unix做服务器对Applet有什么影响???
回复人: illia(蓝雪) ( ) 信誉:100 2002-3-28 0:20:06 得分:10
在java中,当子类定义了与父类同名的属性变量时,即出现了子类变量对同名父类变量的隐藏。
所谓隐藏就是指子类拥有两个同名变量,一个继承自父类,一个由自己定义。当子类执行继承自父类的操作时,处理的是继承自父类的变量,当执行由子类本身定义的操作时,处理就是自己定义的变量,而把继承自父类的变量“隐藏”起来。
也就是说,在Derived类创建的时候,分配了两个x的空间,但是对于外部来说,它只有一个变量x。
而方法的继承则和域中变量的继承不一样:当父类中一个方法被子类覆盖时,它所占用的内存空间将被完全清空,父类的方法在子类中将不复存在。
Base类的对象b的创建是通过new一个Derived来完成的,因此b这个句柄指向的对象其实是Derived类的一个实例,在实例b中,内存空间中分配了两个同名的x,b.show()由于在Derived类里被覆盖了,调用的也是Derived类里面的show()方法,因此这个show()操作的是Derived类里面的x,所以值为2。而b.x=3是因为b的类型是Base,b.x是显式的调用Base类里继承的变量x,所以显示的是Base类所赋的值。