abstract class BaseView
{
public void initView(String moi){};
public BaseView(){}
}class AlarmView extends BaseView{
public AlarmView(String moi){
super();
initView(moi);
}
}public class CurrentAlarmView extends AlarmView
{
String moi = null;
public CurrentAlarmView(String str){
super(str);
}
public void initView(String str){
moi = str;
System.out.println("initView moi = "+moi);
}
public void print(){
System.out.println("moi = "+moi);
}
public static void main(String[] args){
CurrentAlarmView view = new CurrentAlarmView("test");
view.print();
}
}
结果:
initView moi = test
moi = null
请问大虾,为什么moi会为空而不是test?
{
public void initView(String moi){};
public BaseView(){}
}class AlarmView extends BaseView{
public AlarmView(String moi){
super();
initView(moi);
}
}public class CurrentAlarmView extends AlarmView
{
String moi = null;
public CurrentAlarmView(String str){
super(str);
}
public void initView(String str){
moi = str;
System.out.println("initView moi = "+moi);
}
public void print(){
System.out.println("moi = "+moi);
}
public static void main(String[] args){
CurrentAlarmView view = new CurrentAlarmView("test");
view.print();
}
}
结果:
initView moi = test
moi = null
请问大虾,为什么moi会为空而不是test?
楼主这一句重新将moi赋值为null,呵呵
依次执行顺序:
执行CurrentAlarmView构造函数,
执行AlarmView 的构造函数
执行BaseView的构造函数
执行CurrentAlarmView.initView
(在执行构造函数之前,如果类中有static成员,那就先执行static成员初始化。)
初始化CurrentAlarmView的成员。
理解了这个顺序,你就知道为什么是你要的答案了。
moi = str;
System.out.println("initView moi = "+moi);
}莫非楼主以为上边变了,所以下边也变了???? public void print(){
System.out.println("moi = "+moi);
}
{public void initView(String moi){};
public BaseView(){System.out.println("(1)");}
}class AlarmView extends BaseView{
public AlarmView(String moi){
super();
System.out.println("(2)");
initView(moi);
System.out.println("(5)");
}
}public class CurrentAlarmView extends AlarmView
{
String moi = null;
public CurrentAlarmView(String str){super(str);
System.out.println("(6)");
}
public void initView(String str){
System.out.println("(3)");
moi = str;
System.out.println("(4)");
System.out.println("initView moi = "+moi);
}
public void print(){
System.out.println("moi = "+moi);
}
public static void main(String[] args){
CurrentAlarmView view = new CurrentAlarmView("test");
view.print();
}
}自己看
{public void initView(String moi){};
public BaseView(){System.out.println("(1)");}
}class AlarmView extends BaseView{
public AlarmView(String moi){
super();
System.out.println("(2)");
initView(moi);
System.out.println("(5)");
}
}public class CurrentAlarmView extends AlarmView
{
{
System.out.println("(6)");
}
String moi = null;
public CurrentAlarmView(String str){super(str);
System.out.println("(7)");
}
public void initView(String str){
System.out.println("(3)");
moi = str;
System.out.println("(4)");
System.out.println("initView moi = "+moi);
}
public void print(){
System.out.println("moi = "+moi);
}
public static void main(String[] args){
CurrentAlarmView view = new CurrentAlarmView("test");
view.print();
}
}
System.out.println("moi = "+moi);
}
输出的moi是CurrentAlarmView类中String moi = null;因为你使用super(str);将str值赋值给了AlarmView类的moi.所以CurrentAlarmView类在继承父类AlarmView类的方法:
public void initView(String str){
moi = str;
System.out.println("initView moi = "+moi);
}
中输出的是父类AlarmView类moi的值。而CurrentAlarmView类的方法:
public void print(){
System.out.println("moi = "+moi);
}
中输出的是你赋值的String moi = null本类的值。
super(); // 其中把view中的moi变成了"test"
后
String moi = null; // 又将其改回成为null不明白String moi是在什么时候初始化的??..??
{
{
System.out.println("(grandfather)");
}
public void initView(String moi){};
public BaseView(){System.out.println("(1)");}
}class AlarmView extends BaseView{
{
System.out.println("(father)");
}
public AlarmView(String moi){
super();
System.out.println("(2)");
initView(moi);
System.out.println("(5)");
}
}public class CurrentAlarmView extends AlarmView
{
{
System.out.println("(6)");
}
String moi = null;
public CurrentAlarmView(String str){super(str);
System.out.println("(7)");
}
public void initView(String str){
System.out.println("(3)");
moi = str;
System.out.println("(4)");
System.out.println("initView moi = "+moi);
}
public void print(){
System.out.println("moi = "+moi);
}
public static void main(String[] args){
CurrentAlarmView view = new CurrentAlarmView("test");
view.print();
}
}
谢谢。
{
{
System.out.println("(6)");
}
String moi = null;
public CurrentAlarmView(String str){super(str);
System.out.println("(7)");
}
输出为:
(1)
(2)
(3)
(4)
initView moi = test
(5)
(6)
(7)
moi = null
请问yanxiazhiqiu(艳夏之秋) 为什么{System.out.println("(6)");}String moi = null;这两句在System.out.println("(7)");之前执行.
一个小问题:为什么{System.out.println("(6)");}不加{}会报错?
{
{
System.out.println("(6)");
}
String moi = null;
public CurrentAlarmView(String str){super(str);
System.out.println("(7)");
}
输出为:
(1)
(2)
(3)
(4)
initView moi = test
(5)
(6)
(7)
moi = null
请问yanxiazhiqiu(艳夏之秋) 为什么{System.out.println("(6)");}String moi = null;这两句在System.out.println("(7)");之前执行.
一个小问题:为什么{System.out.println("(6)");}不加{}会报错?JAVA程序的初始化顺序中:子类构造器最后初始化。我认为不加{},就不是一个语句块。