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

© lovecx24 中级黑马   /  2013-11-29 20:20  /  1097 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lovecx24 于 2013-11-29 20:25 编辑

看Java 继承方面的知识看到上面有这么一个题,百思不得其解啊
  1. class Depend {
  2. int i = 10;

  3. public Depend() {
  4. print();
  5. i = 20;
  6. }

  7. void print() {
  8. System.out.println("Depend=> " + this.i);
  9. }
  10. }

  11. class Test1 extends Depend {
  12. int i = 30;

  13. public Test1() {
  14. print();
  15. super.print();
  16. i = 40;
  17. }

  18. void print() {
  19. System.out.println("Target=> " + i);
  20. }

  21. }
复制代码
  1. public class Test{
  2. public static void main(String[] args){
  3. new Test1();
  4. }
  5. }
复制代码

答案不是:
Depend=> 0
Target=> 30
Target=>20

答案居然是 :
Depend=>10
Target=> 30
Target=>20     子类实例都没有创建,就能调用子类方法吗?



评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!继续努力哈

查看全部评分

3 个回复

倒序浏览
主函数在哪里?
回复 使用道具 举报
程序入口是:
  1. public class Test{
  2. public static void main(String[] args){
  3. new Test1();
  4. }
  5. }
复制代码
回复 使用道具 举报
本帖最后由 ysunday 于 2013-11-29 20:37 编辑

new Test1()这个就是创建子类对象了。这句话就和 Test1 t = new Test1();是一样的,只不过这个new Test1()创建了一个每名字的对象而已。当你创建这个对象的时候,会调用Test1的构造方法
public Test1() {
//super();这里有个隐含的super()会去调用你的父类的构造函数,也就是第04行,父类构造函数调用了
               //父类的print,打印了depend -》10;然后执行i  = 20将父类中的i改变为20
print();    //然后执行这句,执行Test1的print,打印target—》30
super.print();//然后执行这句,执行父类的print,因为刚才你已经将父类的i = 20了,所以打印//target-》20喽
i = 40;
}

评分

参与人数 1黑马币 +6 收起 理由
lovecx24 + 6 赞一个!

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马