java 父类普通方法中调用重写方法,省略的this代表的是谁,希望提供完整说明
classFu{voidshow(){this.doSome();}voiddoSome(){System.out.print("fu");}}classZiextend...
class Fu
{
void show()
{
this.doSome();
}
void doSome()
{
System.out.print("fu");
}
}
class Zi extends Fu
{
void doSome()
{
System.out.println("zi");
}
}
void main()
{
Zi z = new Zi();
z.show();
}
希望告诉我实际内存中是怎么执行的 展开
{
void show()
{
this.doSome();
}
void doSome()
{
System.out.print("fu");
}
}
class Zi extends Fu
{
void doSome()
{
System.out.println("zi");
}
}
void main()
{
Zi z = new Zi();
z.show();
}
希望告诉我实际内存中是怎么执行的 展开
2014-10-01 · 知道合伙人互联网行家
关注
展开全部
内存中怎么执行 只有 写 jvm 的才能说明百!
我只说下简单的 流程, 首先, 你的 Zi 写了继承Fu, 所以 Fu 中的 代码都会被继承到 Zi 中。
然后 你的Zi 重写了 Fu 中的doSome ,当java 代码执行的时候 首先会搜索 自己 的类中有没有,如果有 就执行自己的,如果没有就到父类中去找,如果还没有 就到父类的父类中去找。。。等。。。。
在 你上面的代码中可以看到 明显的 在 Zi 走就有 所以执行 show 之后 就打印了zi,虽然你的 show 是父类中的一个方法,你只要记住是从 自类向父类搜索就可以了。
你可能纠结为什么是 zi 而不是 fu 还是之前说的,应为你是 重写 ! 重写和覆盖是有区别的。
具体的可以看 http://www.xiaoyunduo.org/article/99/
你的问题是 重写和覆盖的问题 和有么有 this 没有半点关系,不信的话你写上this 和不写this 都执行以下就清楚明白了
我只说下简单的 流程, 首先, 你的 Zi 写了继承Fu, 所以 Fu 中的 代码都会被继承到 Zi 中。
然后 你的Zi 重写了 Fu 中的doSome ,当java 代码执行的时候 首先会搜索 自己 的类中有没有,如果有 就执行自己的,如果没有就到父类中去找,如果还没有 就到父类的父类中去找。。。等。。。。
在 你上面的代码中可以看到 明显的 在 Zi 走就有 所以执行 show 之后 就打印了zi,虽然你的 show 是父类中的一个方法,你只要记住是从 自类向父类搜索就可以了。
你可能纠结为什么是 zi 而不是 fu 还是之前说的,应为你是 重写 ! 重写和覆盖是有区别的。
具体的可以看 http://www.xiaoyunduo.org/article/99/
你的问题是 重写和覆盖的问题 和有么有 this 没有半点关系,不信的话你写上this 和不写this 都执行以下就清楚明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
this代表Fu类对象。具体在内存中是怎么执行的,我也不知道。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
this代表是子类对象 不要误导人
追问
能否说一下内存中的执行过程
追答
当java对象被new到堆内存时,它除了包含成员变量和成员方法外,还包含一个this引用,这个引用指向该对象本身。可以这么认为,this相当于一个指针,它指向对象本身,同时它还在对象内部。用this.可以调用该对象的成员变量和成员方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询