class Base{
int i;
Base(){
add(1);
System.out.println(i);
}
void add(int v){
i+=v;
System.out.println(i);
}
void print(){
System.out.println(i);
}
}
class MyBase extends Base{
MyBase(){
add(2);
}
void add(int v){
i+=v*2;
System.out.println(i);
}
}
public class TestClu {
public static void main(String[] args) {
go(new MyBase());
//System.out.println();
}
static void go(Base b){
b.add(8);
//b.print();
}
}
谁能帮我分析分析程序的运行顺序?非常感谢!
int i;
Base(){
add(1);
System.out.println(i);
}
void add(int v){
i+=v;
System.out.println(i);
}
void print(){
System.out.println(i);
}
}
class MyBase extends Base{
MyBase(){
add(2);
}
void add(int v){
i+=v*2;
System.out.println(i);
}
}
public class TestClu {
public static void main(String[] args) {
go(new MyBase());
//System.out.println();
}
static void go(Base b){
b.add(8);
//b.print();
}
}
谁能帮我分析分析程序的运行顺序?非常感谢!
解决方案 »
- 字符串转成文件的时候,能否转成任意类型的文件?
- 为什么在命令窗口能运行在ECLIPSE不能运行
- 关于JTable中的Jbutton
- 如何在调整窗口大小的时候,使JTextArea可以满窗口?
- 如何根据JTree节点信息不同改变节点图案?
- 如何实现自定义类的复制?
- 请问有那位高人用过Java Advanced Imaging (JAI) API?
- 又有了点分,请教log4j的问题
- 请问哪里有java2 核心技术卷2可下(第6版 ),第5版也可,书店里没找到。谢谢!
- swing的问题还是jbuiler的问题??
- 怎样在JLsit中添加新的项
- 高分求java连接oracle 10g,执行存储过程的程序。
2
2
6
22分析:
go(new MyBase()); //这句先初始化MyBase,首先是父类的构造函数,执行add(1),这个add是子类的add而不是父类的add,所以结果是i= 2,然后打印2,add执行完了之后,父类构造函数还要打印i,所以又是2,现在再执行子类的构造函数,add(2),由于i=2,所以执行之后i= 2+ 2*2,所以为6,然后打印6. static void go(Base b){
b.add(8);
//b.print();
}
//这个时候再执行go函数,把b传进去,执行add函数,结果为 i= 6 + 2* 8 ,结果为22,所以打印22