一个正确的代码:
package new_doutai;
class A{
public void f(){
System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f(){
System.out.printf("BBBB\n");
}
}
public class duotai {
public static void main(String[] args){
A aa = new A();
B bb = new B();
aa = bb;
aa.f();
System.exit(0);
}
}
稍作修改的错误代码:
package new_doutai;
class A{
public void f(){
System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f(){
System.out.printf("BBBB\n");
}
}
public class duotai {
public static void main(String[] args){
A aa = new A();
B bb = new B();
aa = bb;
bb=aa;//这行代码有问题。
//aa在栈中分配了父类的内存,后来aa=bb;如果按照c++语法理解的话,那么bb=aa;这样是可以的(指针永远只占四个字节嘛)
//但是Java里面提出的错误是Type mismatch:cannot convert from A to B,说明aa还是A类型的对象!
bb.f();
aa.f();
System.exit(0);
}
}