先看下面这个小程序class Base
{
int i;
Base()
{
add(1);
}
void add(int v)
{
i+=v;
}
void print()
{
System.out.println ( i );
}
}
class Extension extends Base
{
Extension()
{
add(2);
}
void add(int v)
{
i+=v*2;
}
}
public class Test
{
public static void main(String args[])
{
bogo(new Extension());
}
static void bogo(Base b)
{
b.add( 8 ) ;
b.print();
}
}哪位前辈能给说一下它的执行顺序?
{
int i;
Base()
{
add(1);
}
void add(int v)
{
i+=v;
}
void print()
{
System.out.println ( i );
}
}
class Extension extends Base
{
Extension()
{
add(2);
}
void add(int v)
{
i+=v*2;
}
}
public class Test
{
public static void main(String args[])
{
bogo(new Extension());
}
static void bogo(Base b)
{
b.add( 8 ) ;
b.print();
}
}哪位前辈能给说一下它的执行顺序?
class Base{
int i;
Base()
{
add(1);
}
void add(int v)
{
i+=v;
print();\\注意这里没有执行,因为它调用的是子类的add()方法!
}
void print()
{
System.out.println ( i );
}
}
class Extension extends Base{
Extension(){
add(2);
}
void add(int v)
{
i+=v*2;
print();
}
}
class Test{
public static void main(String args[]){
bogo(new Extension());
}
static void bogo(Base b)
{
b.add( 8 ) ;
b.print();
}
}
interhanchi你能给我跟踪i的值走一遍程序吗
2.到父类找i,调用Base类的构造函数add(1),注意这是的add是调用Extension.add(int v)方法,所以i=2;
3.又回到1中的i+=v*2,这是i=6,所以new Extension()的结果是i=6
4.执行bogo方法,传递new Extension()堆的地址到bogo方法的参数,所以b.add( 8 ) 是调用Extension.add(int v)方法,i+=v*2;所以i=6+8*2=22不知道这样对不对
http://www.1110.net/down.asp?UserID=438698