3. 将超类对象的引用赋值给子类类型的变量会产生编译错误。
答:这句话也就是说类似于这样Child c = new Father();如果不使用强制类型转换,可能会出现编译错误。如果Child c = (Child)new Father();可能不会。因为几乎没有人这么用。原因是由于出现类似于‘对象切片’的原因,把父类对象赋值给子类的变量,而父类对象不具有子类中的属性。所以这样一个子类变量也不可能拥有调用自己类中定义的变量的权利和内存空间。就算是编译不错,也只能访问父类对象所占用的那么大一块堆空间中的数据。所以对于强类型的语言来说,不管是RTTI机制还是强制类型转换,还是对象的下转型、上转型对象,主要还是内存模型的问题。说到JVM中就是在维护的一张和类,对象有关的表的索引问题。JAVA语言没有指针,叫引用(Reference)。在JVM中使用的是另外一个名称类似于指针,其实类似于基址+变址+偏址 寻址。而这个引用充当相当于这个偏址。所以它没有把引用叫做指针。指针是内存的决对位置。引用是一个相对位置。