简单的超类方法访问问题??
问题在main的输出那个地方,为什么会这样
////extends例题,还有变量名隐藏和方法隐藏
class father
{
int x;
father(int x)
{
this.x=x;
}
public int getx()
{
return this.x; //这里改成x或者this.x结果都还是100????
}
}
class sun extends father
{
int x;
//super(10)
sun(int x,int y)
{
super(y);
this.x=x;
}
public int getx()
{
return x;
}
}public class example_extends {
public static void main(String[] argv)
{
sun s=new sun(100,10);
System.out.println("father="+((father)s).x+"\tsun="+s.x);
System.out.println(((father)s).getx()+"\t"+s.getx());
} //(((father)s).getx()这里调用的是超类的getx()呀??输出的应该是10,为什么输出是100???
}
问题点数:0、回复次数:3Top
1 楼logic_online(淡忘)回复于 2005-04-02 22:58:07 得分 0
你在子类sun中重载了getX()方法,根据多态性,无论你调用getX方法的引用是父类的还是子类的,只要引用指向的对象是子类的对象,getX方法访问到的x值都是子类中的,而不是你认为的使用父类的引用调用getX方法就会访问到父类的x值.
如果你在子类的定义中去掉对getX方法的定义,结果就会是你预料的那样了,因为成员变量x不能被重载,而是在子类中被隐藏了,getX方法访问到的x值是根据调用getX方法的引用决定的.Top
2 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-02 23:09:31 得分 0
java默认是后期绑定的,楼主是c++转过来的吧
你向上转型以后调用的还是对象的实际类型的数据成员或者方法,多态的表现Top
3 楼milkslzz(小肥虫.net)回复于 2005-04-02 23:36:24 得分 0
呵呵,高手阿,一眼就看出我就是从c++转过来的。。。。
我现在刚刚自学java ,现在有不懂的问题只要请教各位大虾拉
thanks~~
Top




