java:
//创建父类
class A{
public void f(){
System.out.println("AAA");
}
}
//创建子类
class B extends A{
public void f(){
System.out.println("BBB");
}
}
class TestA{
public static void main(String[] args){
A aa = new A();
B bb = new B();
aa = bb;//父类的引用指向子类的引用,正确
bb = aa;//子类的引用指向父类的引用,错误
bb=(B)aa;//将父类的引用转换为子类的引用,然后赋给子类的引用
}
}
C语言:暂时认为double是父类,int是子类
int main(){
int A;
A=10;//正确 分配一块int类型的内存空间,该空间指向一个int类型的对象【子类地址->子类对象】
A=10.0;//错误 分配了一块int类型的空间,该空间指向一个double类型的对象【子类地址->父类对象】
//间接地证明了子类的地址不能指向父类的对象
double B;
B=10;//正确 分配了一块double类型的空间,该空间指向了int类型的对象【父类地址->子类对象】
B=10.0;//正确 分配了一块double类型的空间,该空间指向了double类型的对象【父类地址->父类对象】
return 0;
}