劳烦大虾能解释一下这个程序的执行过程,谢谢了.小弟新手哈!!求见谅

st_victory 2013-09-27 01:11:53
public class $$$$$$$$$$$$$$$$$$$$$$$$$$$4 {
public static void main(String[] args){
A11 a = new B11();
}

}
class A11{
A11(){test();}
public void test(){
System.out.println("HelloWorld!");
}
}
class B11 extends A11{
int i =10;
B11(){super();}
public void test(){
System.out.println(i);
}
}


能拜托各位大神解释一下他的运行流程么???
...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ganshenml 2013-09-27
  • 打赏
  • 举报
回复
把A11里面的构造方法改为:

    A11(){
	    	System.out.println(" before All.test");
	    	test();
	    	System.out.println(" after All.test");
    	}
这样便于看运行过程: 结果为: before All.test 0 after All.test ,因此可以知道,先调用的是父类的构造方法,然后执行了里面的过程,先输出了before这一条,然后执行了test()方法(而此处的test()是对子类的调用,里面由于i还没有被初始化,所有默认为0),之后再输出after.如果把B11里面的i改为static的话,那么输出结果应该是10,因为子类的静态变量的赋值在父类构造方法之前; 具体执行过程大致为: 父类的静态成员赋值和静态块 子类的静态成员和静态块 父类的构造方法 父类的成员赋值和初始化块 父类的构造方法中的其它语句 子类的成员赋值和初始化块 子类的构造方法中的其它语句
Riat 2013-09-27
  • 打赏
  • 举报
回复
这里B11给I赋值时是在类里面,所以等于没有赋值,而且A11的test被B11继承了,所以调用的是B11的test,我是这么觉得的!
开发者_android 2013-09-27
  • 打赏
  • 举报
回复
其实,调用完后还有其它调用.但那些你可以不去看.简单的理解就可以.不要想太多. 如果你想了解更详细,加断点,debug一下.就知道了调用顺序和次数.
开发者_android 2013-09-27
  • 打赏
  • 举报
回复
0 继承多态的问题. new B11() 先调用父类构造:B11() B11中super了父类,调用A11()构造 再调用子类重写后的test()
  • 打赏
  • 举报
回复
test()被覆写了,输出10
  • 打赏
  • 举报
回复
hello world不解释

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧