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
解决方案 »
- 求助,转换字符串,什么时间需要用tostring(),什么时间需要new String()
- Linux下用的JDialog对话框为什么会出现在任务栏中?
- java后台的trim方法
- J2SE与蓝牙
- 一个组件覆盖了另外一个,如何改变其层的顺序?
- db2服务器用的字符集是utf-8,客户端为windows XP中文版,请问jsp下怎么读取数据表中的中文字符?
- 请问在jsp里面怎么使用数据库?
- 如何实现阴影效果?
- 静态变量为什么自加后一直不变的呢
- 请问java中有类似vc的atof和atoi的语句吗?
- 请问怎么得到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)方法被覆盖