java 继承题。看输出什么。。不要运行
java吧
全部回复
仅看楼主
level 10
运行后知道答案的就不要发上来了。谢谢合作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);}}
2008年06月19日 09点06分 1
level 0
没main方法吗?
2008年06月19日 09点06分 2
level 0
main都没有从哪里进入啊不伦不类的问题要我猜应该是t 0t 30 d 20
2008年06月19日 09点06分 3
level 10
神啊。。忘了。public class Test{ public static void main(String[] args) { new Test1();}}
2008年06月19日 09点06分 4
level 0
答案是:Depend=> 10;Target=> 30Target=>20
2008年06月19日 09点06分 5
level 0
111
2008年06月19日 10点06分 6
level 0
111
2008年06月19日 10点06分 7
level 0
GSDFGSDG
2008年06月19日 10点06分 8
level 10
3楼的对了。
2008年06月19日 10点06分 9
level 10
泛型?哪来的泛型。。下面贴出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()这句话产生的.
2008年06月19日 23点06分 11
level 1
好文,俺转走了。o(∩_∩)o...哈哈
2008年06月20日 00点06分 12
level 0
我靠 ,很信奋,学了2个礼拜t i java 能看懂这题了,03020
2008年06月20日 12点06分 13
level 0
easy
2008年06月20日 12点06分 14
level 1
bug绝对是BUG阿不符合逻辑阿,既然都说了 儿子还没有生出来呢为什么会有儿子的方法呢?
2008年06月20日 13点06分 15
level 0
我也觉得是BUG.连子类的实例都还没有创建完就开始先调用了子类的方法.这似乎有点不可思议.不知道他是通过什么来调用子类的方法的,难道是特殊的上溯造型吗?
2008年06月20日 13点06分 16
level 1
不是BUG,大家可能对变量初始化这个概念不太清楚JVM首先分配了类变量的内存并初始化为默认值(int是0)然后才开始执行代码具体见JLS 12(还是9,不太记得了)章 执行
2008年06月21日 02点06分 17
level 0
但是为什么它会在父类的构造器调用了子类的同名方法呢?要知道这个时候子类的实例还没有被创建呀
2008年06月21日 04点06分 18
level 1
实例只是一堆数据而已(比如类变量)创建实例时分配内存空间,class(包括它的描述、方法等等)则在此之前就应该被载入到JVM里面,所以没有矛盾
2008年06月21日 04点06分 19
1