设有2个类:Fruit和Apple,其中Apple是Fruit的子类。现遇到这样一个问题,百思不得其解,望高手指点:
class Fruit{
int i=1111;
void outMessage() {
...
System.out.println("where is Fruit!");
}
}
class Apple extends Fruit {
int i=2222;
void outMessage() {
...
System.out.println("where is Apple!");
}
}
class ....{
.......
Apple redApple=new Apple();
Fruit aFruit=redApple;
System.out.println("aFruit's content have:"+aFruit.i+aFruit.outMessage());
}
结果是aFruit.i输出的是父类中的i值,而aFruit.outMessage()输出的是子类中的值。真是见鬼了!
class Fruit{
int i=1111;
void outMessage() {
...
System.out.println("where is Fruit!");
}
}
class Apple extends Fruit {
int i=2222;
void outMessage() {
...
System.out.println("where is Apple!");
}
}
class ....{
.......
Apple redApple=new Apple();
Fruit aFruit=redApple;
System.out.println("aFruit's content have:"+aFruit.i+aFruit.outMessage());
}
结果是aFruit.i输出的是父类中的i值,而aFruit.outMessage()输出的是子类中的值。真是见鬼了!
输出没错,
因为Fruit aFruit=redApple;(aFruit是基类类型)
所以aFruit.i=1111;
对于aFruit.outMessage();java中默认为动态联编,所以调用子类的函数outMessage()