对象的转型

转型是面向对象多态性的一个体现。

向上转型:将子类的对象赋值给父类的引用(引用可以理解为对象)。

比如Student继承Person,那么这样表示:

Student s = new Student();
Person p = s ; 

以上两步等价于下面的一步:

Person p = new Student();


1.一个引用能调用哪些成员(变量和函数),取决于这个引用的类型。这就是说,p只能调用Person类中定义的成员,不能调用s中独有的成员。

2.而一个引用调用的是哪一个方法,取决于这个引用指向的对象。就上面的例子说,如果Student和Person类中都有introduce()方法(Students中覆写了Person中的introduce()方法),那p.introduce();就指向s中的introduce()方法。

向下转型:将父类的对象赋值给子类的引用。

Student s1 = new Student();
Person p = s1 ; 
Student s2 = (Student)p ; 

可以看出,向下转型要先向上转型,再强制向下转型。

同样,上面三句可以等效成下面两句:

Person p = new Student();
Student s = (Student)p;

下面的例子是错误的向下转型:

Person p = new Person();//向下转型没有先向上转型
Student s = (Student)p;

 --------------------------Oct.31

为什么要对象转型呢?思考了一下,可能有下面的原因:

对于向上转型,回顾上面的第一点:“一个引用能调用哪些成员(变量和函数),取决于这个引用的类型。”子类对象如果想要调用父类对象的成员,就可以向上转型。

对于向下转型,回顾上面的第二点:“一个引用调用的是哪一个方法,取决于这个引用指向的对象。”父类对象强制转成子类对象,就可以调用子类对象的方法。

以后在应用中慢慢体会。

(end)

posted @ 2013-10-30 18:14  LarryLawrence  阅读(315)  评论(0编辑  收藏  举报