22吧,i应该被初始化成0,先是
Base() {
add(1);
}
然后i=2
Extension() {
add(2);
}
在i=6
class Extension extends Base {
void add(int v) {
i += v*2;
}
}
i=22
Base() {
add(1);
}
然后i=2
Extension() {
add(2);
}
在i=6
class Extension extends Base {
void add(int v) {
i += v*2;
}
}
i=22
解决方案 »
- 网络程序问题
- FileOutputStream写入集合的问题
- 这个为什么不能运行呢?
- 门外汉求助!!!用myeclipse8.5把程序打成jar包,有登陆界面,之后就没有显示了,求救!
- 如何通过java得到当前月的前两个月?
- 关于抽象类的理解问题:
- 我用的JBuilder8 中编辑jsp时的上下文敏感功能怎么突然没了?
- 哪儿有java2类库的电子书?!
- 关于jbuilder5编译器的问题~~~~
- 虚心请教几个Jbuider4小问题?
- 请问怎么得到JDK1。4?
- "BorrowerInformation.java": Error #: 300 : class Persistent not found in class bo.BorrowerInformation
A extends B;B extends C程序运行顺序:C中的interface/static-->B中的interface/static-->A中的interface/static-->C中的instance variable/constructor-->B中的instance variable/constructor-->A中的instance variable/constructor-->A中的main()里面还有更深的概念,自己写程序去试:System.out.println("check: "+ variable):
static void bogo(Base b) {
b.add(8);
b.print();
}
然后才开始main()方法,但当bogo方法调用到 Base类的变量时,又要先初始化Base类,然后在类推,太烦了,你自己推吧!
bogo(new Extension());//调用Extension的构造函数,从而调用base类
的构造函数,但是基类的构造函数中调用了
add函数,此时的add函数为什么是Extension
类的add函数而不是base类的add函数
Extension类从Base类继承了i,但覆盖了add方法,所以两个类中的i是同一个。
在jtest类中,new Extension()创建了一个新的子类对象,首先执行父类的构造方法,其中的方法add指的是子类的add(多态性),i变成2,再执行子类的构造方法,i变成6
然后并作为参数传递给方法bogo,bogo的参数是Base类的(把子类对象的引用赋给了参数b)
b.add(8)调用的是子类的add方法,因此为22
在执行bogo(new Extension())时,是不是把Extension类型的成员隐式转化为Base类型的成员?那么b.add(8)为什么又调用的是子类的函数成员.
另外请大家给推荐一下有详细讲解此方面问题的书,最好有电子版:),先谢过了
2.方法覆盖:在类Base中add(int v)方法被覆盖