本帖最后由 翁游龙 于 2012-6-29 16:48 编辑
关于以下代码有两个疑问,请高手指点:
class Base{
int count = 2;
public void display(){
System.out.println(this.count);
}
}
class Derived extends Base{
int count = 20;
@Override
public void display(){
System.out.println(this.count);
}
}
public class FieldAndMethodTest{
public static void main(String[] args){
//声明并创建一个Base对象
Base b = new Base();
System.out.println(b.count);
b.display();
System.out.println("-----(1)-----");
//声明并创建一个Derived对象
Derived d = new Derived();
System.out.println("d.count = " + d.count);
d.display();
System.out.println("-----(2)-----");
//声明一个Base变量,并将Derived对象赋给该变量
Base bd = new Derived();
System.out.println(bd.count);
bd.display();
System.out.println("-----(3)-----");
//让d2b变量指向原d所指向的Derived对象
Base d2b = d;
System.out.println("d2b.count = " + d2b.count);
System.out.println("-----(4)-----");
}
}
运行结果为:
2
2
-----(1)-----
d.count = 20
20
-----(2)-----
2
20
-----(3)-----
d2b.count = 2
-----(4)-----
问题:
1、前面两段的输出是毫无疑问的,问题是为什么第三段这里,Derived继承了Base,
输出结果一个是2,另一个是20呢?结果不是应该都为20吗?这里不是很明白。
2、另外一个问题:第四段这里d2b和d指向同一个对象,可是访问d.coount时输出20,
而访问d2b.count时却输出2,这里很费解?
|
|