上海的网站开发公司电话,中国免费广告网,erp管理系统免费版,网站建设 模版对象的转型#xff08;casting)有两种#xff0c;一种是向上转型#xff0c;一种是向下转型。
向上转型#xff1a;父类引用指向子类对象。这属于自动类型转换#xff0c;编译器会自动完成。
上一节的多态中#xff0c;形参为父类Animal, 但是调用时实参为子类对象Dogcasting)有两种一种是向上转型一种是向下转型。
向上转型父类引用指向子类对象。这属于自动类型转换编译器会自动完成。
上一节的多态中形参为父类Animal, 但是调用时实参为子类对象Dog就是属于自动类型转换。
另外下图中的
Animal b new Dog();//这就是向上转型自动完成
也是这种情况。在这里Animal是告诉编译器b的类型是什么其作用就类似int b的中int一样,所以b的类型是Animal但是new Dog() 造成的结果就是b运行时可以调用Dog这个类型里的与Animal也有的shout()方法。所以其运行结果是旺旺旺“。
这就是向上转型的自动完成。 向下转型向上转型后的父类引用的变量只能调用它的编译类型的方法不能调用它运行时的类型的方法。如果要调用需要进行类型的强制转换。
在上面的例子里b就是向上转型后的父类引用的变量Animal就是所谓的编译类型。Dog就是运行类型。所以当b调用Dog这个类型里特有的seeDoor()方法时就报错。
如果仍然想使用seeDoor方法就需要使用类型的强制转换如下