A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 0618张军 中级黑马   /  2015-7-5 16:04  /  3084 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
/*当第一次调用父类构造方法时会运行到show()方法,,,红色部分,,
此时的show方法为什么会输出的是子类的show方法,而不是父类的????
*/
class Fu {
Fu() {
  super();
  show();//???
  return;
}
void show() {
  System.out.println("父类show");
}
}
class Zi extends Fu {
int num = 8;
Zi() {
  super();
  return;
}
void show() {
  System.out.println("子类show" + num);
}
}
public class ExtendDemo {
public static void main(String[] args) {
  Zi z = new Zi();
  z.show();
}
}

最佳答案

查看完整内容

码字解释不知道你能不能懂,我试试吧 首先当创建对象时,内存中有堆内存,栈内存和方法区,主函数main()会到栈内存开辟空间,然后创建子类对象时,由于子类继承父类,在方法区就会先加载父类的shou(),void show()。然后加载子类的方法在方法区,然后创建对象,在堆内存完成对象的默认初始化,(注意:默认初始化在显示初始化之前),所以先运行子类构造器,运行子类构造器,里面有super()继续运行父类构造器,注意(运行 ...

17 个回复

倒序浏览
码字解释不知道你能不能懂,我试试吧
首先当创建对象时,内存中有堆内存,栈内存和方法区,主函数main()会到栈内存开辟空间,然后创建子类对象时,由于子类继承父类,在方法区就会先加载父类的shou(),void show()。然后加载子类的方法在方法区,然后创建对象,在堆内存完成对象的默认初始化,(注意:默认初始化在显示初始化之前),所以先运行子类构造器,运行子类构造器,里面有super()继续运行父类构造器,注意(运行父类构造器的时候由于子父类指向同一个地址指针,而此时创建的是子类对象,所以子类对象要先查看方法区是否有子类函数,有的话运行子类,没有再找父类方法含数,此时栈内的父类构造器弹栈,重点:之后子类才能显示初始化(int x=8),所以显示初始化之后,输出的就是8了,也就是子类的方法num=8了。如果还是看不明白,私信我,我给你画个图就明白了
回复 使用道具 举报
因为你复写 了 父类的show()方法,复写之后无论你在哪里调用show()方法 ,都是你复写之后的show()。
回复 使用道具 举报
继承中,构造方法才会在第一行隐式调用父类默认构造方法,其他方法一旦与父类方法同名同参数,父类的这个方法就被覆盖了
回复 使用道具 举报
因为子类继承父类后,子类的show方法声明和父类的一样,就表示重写了父类的show方法,所以调用方法的时候,就是调用是子类的方法。
回复 使用道具 举报
继承情况下,子类重写了父类的方法时,再想要访问父类的那个被重写的方法,在子类中就只能通过super.方法名([参数1,参数2,.....])来访问啦,否则调用的就只是子类中重写的方法了。希望你的问题得到解答!:lol
回复 使用道具 举报
a80194367 发表于 2015-7-5 18:10
码字解释不知道你能不能懂,我试试吧
首先当创建对象时,内存中有堆内存,栈内存和方法区,主函数main() ...

这也能碰到你?。。。。。{:3_46:}
回复 使用道具 举报
你复写了show方法
回复 使用道具 举报
子类zi创建的对象,就是调用子类重写的父类方法,如果没有重写才会去调用父类的呀
回复 使用道具 举报
父类的show方法被你覆盖,重写了。怎么还会调用父类的show方法呢?倘若你把子类的show方法声明为私有,或者加个参数什么的,让它跟父类的show方法不一样,那就不会重写,你就可以用父类的show方法了。望楼主采纳。
回复 使用道具 举报
a80194367 发表于 2015-7-5 18:10
码字解释不知道你能不能懂,我试试吧
首先当创建对象时,内存中有堆内存,栈内存和方法区,主函数main() ...

讲的非常详细,赞一个
回复 使用道具 举报
zhuoxiuwu 发表于 2015-7-6 11:34
讲的非常详细,赞一个

赞一个应该给黑马币滴  ,  楼主为什么还不打赏我腻
回复 使用道具 举报
a80194367 发表于 2015-7-6 16:29
赞一个应该给黑马币滴  ,  楼主为什么还不打赏我腻

想入学,技术分都还没到10分啊。
回复 使用道具 举报
感谢楼主,没有白码字,
回复 使用道具 举报
君子无醉 来自手机 中级黑马 2015-7-8 09:36:20
15#
可以看下我论坛上分享的笔记 对这一部分知识点总结的很详细
回复 使用道具 举报
因为你复写啦show方法
回复 使用道具 举报
简单点说就是子类重写了父类。
回复 使用道具 举报
父类中的方法被你重写后就会被子                    类中的方法覆盖掉,所以如果想要             使用父类中的方法,就              要避免覆盖父类的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马