java吧 关注:1,294,215贴子:12,829,367

java 继承题。看输出什么。。不要运行

只看楼主收藏回复

运行后知道答案的就不要发上来了。谢谢合作
class Depend {
int i = 10;

public Depend() {
print();
i = 20;
}

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

class Test1 extends Depend {
int i = 30;

public Test1() {
print();
super.print();
i = 40;
}

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

}


IP属地:北京1楼2008-06-19 17:10回复
    没main方法吗?


    删除|2楼2008-06-19 17:12
    回复
      2026-01-11 13:32:49
      广告
      不感兴趣
      开通SVIP免广告
      • 218.65.209.*
      main都没有
      从哪里进入啊
      不伦不类的问题

      要我猜应该是
      t 0
      t 30 
      d 20


      3楼2008-06-19 17:22
      回复
        神啊。。忘了。
        public class Test{
         public static void main(String[] args) {
         new Test1();
        }
        }


        IP属地:北京4楼2008-06-19 17:34
        回复
          答案是:
          Depend=> 10;
          Target=> 30
          Target=>20


          删除|5楼2008-06-19 17:52
          回复
            • 218.106.86.*
            111


            6楼2008-06-19 18:03
            回复
              • 218.106.86.*
              111


              7楼2008-06-19 18:04
              回复
                • 218.106.86.*
                GSDFGSDG


                8楼2008-06-19 18:05
                回复
                  2026-01-11 13:26:49
                  广告
                  不感兴趣
                  开通SVIP免广告
                  3楼的对了


                  IP属地:北京9楼2008-06-19 18:11
                  回复
                    泛型?哪来的泛型。。


                    下面贴出csdn中牛人对此的解释



                    我们顺着初始化的顺序来说
                    首先程序从main方法开始执行,new Test1(),这句话就是要new一个Test1的对象,根据对象初始化的顺序,初始化子类之前必须要初始化父类,所以此时一系列的调用开始了
                    1,调用Test1的父类Depend类的构造函数,在调用构造函数之前,成员变量是先于构造函数初始化的,这个时候Depend里面的i已经有值了,它的值就是10,在Depend构造函数里面,我们看到的第一句是:print方法,这个print方法我们要注意,它在Depend的子类也定义了,并且此次初始化是由子类Test1发起的,所以实际上这个print方法调用的是Test1里面定义的print,而这个时候有意思的事情就出现了,此时子类还没有出生呢,因为这个时候父类才正在构造之中,所以子类中此时的i还是0,而print正好打印出的是子类的i,所以第一次输出是0;
                    2,父类调用完子类的print后,把父类的i赋了值20,此时父类已经完全被构造出来了,马上就要开始构造子类了.
                    3,同理,在调用子类的构造函数之前,子类的i被赋了初值30,然后进入子类的构造函数,此时调用的也是print,这个就非常好理解了,这个print肯定是子类自己的print方法了,此时i已经构造好,当然,此时输出的值是30;
                    4,下一句super.print(),这句话显示的调用了父类的print方法,而此时父类的i已经在父类的构造函数里面改为20了,所以此次调用输出20.
                    5,然后再把子类的i的值设为50.

                    在以上过程中,如果掌握好了类的初始化顺序,是比较容易知道输出结果的.还有一点要记住,JAVA里面的方法是动态绑定的,而成员却是静态绑定的.父类里面调用的print之所以会输出0,就是因为print实际上调用的是子类的print,因为整个这场调用都是由new Test1()这句话产生的.


                    IP属地:北京11楼2008-06-20 07:59
                    回复
                      好文,俺转走了。o(∩_∩)o...哈哈


                      12楼2008-06-20 08:05
                      回复
                        • 218.79.199.*
                        我靠 ,很信奋,学了2个礼拜t i java 能看懂这题了,
                        0
                        30
                        20


                        13楼2008-06-20 20:20
                        回复
                          • 218.79.199.*
                          easy


                          14楼2008-06-20 20:21
                          回复
                            bug绝对是BUG阿

                            不符合逻辑阿,既然都说了 儿子还没有生出来呢

                            为什么会有儿子的方法呢?


                            15楼2008-06-20 21:45
                            回复