一个关于java类继承的典型问题。。。有兴趣的请进来

hpguo_java 2002-03-14 12:17:42
源代码是这样的:
class a{
int i=1;
int f(){
return(i);
}
}
class b extends a{
int i=12;
int f(){
return(i);
}
}
class testxx{
static void qq(){
a xx=new b();
System.out.println(xx.i);
System.out.println(xx.f());
}
}

public class testx{
public static void main(String[] args){
testxx.qq();
}
}
输出是:
1
12

这是为什么?
...全文
42 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
karmaho 2002-03-28
  • 打赏
  • 举报
回复
!
zwh23 2002-03-14
  • 打赏
  • 举报
回复
还有什么叫多行性?
zwh23 2002-03-14
  • 打赏
  • 举报
回复
有点明白,但还不是很明白,些程序时一定要注意,不要这样继承,太乱了。会胡

涂的
xhh 2002-03-14
  • 打赏
  • 举报
回复
b类的内存映像如下:
|----------------------------------------
| a.i //a类的成员变量
| a.vptr //指向a类成员函数表的指针(其中被重载的部分为b类的成员函数)
| b.i //b类的成员变量
| b.vptr //指向b类成员函数表的指针
|----------------------------------------
而你的xx是a类的,但他指向b类对象,
所以xx的访问范围是:a.i和a.vptr。
因此,xx.f()执行的是b类中重载a类的方法b.f(),
而xx.i取的是a类中的成员变量a.i。

由此可见对象的多行性只在于成员函数,而不在于成员变量。
xhh 2002-03-14
  • 打赏
  • 举报
回复
to: zwh23(zwh23)
多行性(应该是“多型性”),就是多态性,是面向对象的基本性质
waterdragonfly 2002-03-14
  • 打赏
  • 举报
回复
高,真是高
Eric_yu 2002-03-14
  • 打赏
  • 举报
回复
没错,java所有的函数都默认是虚函数,但变量不是

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧