java 继承属性与方法
发布网友
发布时间:2022-05-19 15:13
我来回答
共2个回答
热心网友
时间:2023-11-04 18:19
首先T2 t2=new T2();进入t2的构造函数..
又t2继承t1.那么进入t1构造函数..
运行t1的outPut();这时t2的name还未赋值..
并且t2重写t1的outPut()..所以执行的是t2.output().打印T2 name is null.
然后执行的是赋值name.再执行t2构造中的output().这时打印T2 name is T2
注释后
t2没有重写父类的output().那么执行的时候直接进的t1的构造.赋值.然后执行的是t1的output.打印T1 name is T1
再进入t2构造调的是t1的output()....同样打印一样的
其实你可以debug一下....就知道他们的运行过程....
热心网友
时间:2023-11-04 18:20
大哥,你T1的name是private的方法,T2重写的outPut,T2实例化第一次调用的T1的构造函数时,当然取不到T1的name值,输出:T2 name is null,调用T2的构造函数时,T2自己的name赋值为T2,当然就输出:T2 name is T2LE
也就是说第一种情况下调用的是T2重写后的outPut,而第二种情况是调用T1本身的outPut方法,由于T1的name是private,所以很正常就引起上面的情况了