Java 对象的转型

是一个经常见到,却一直分不清“上、下”的晕晕的语法。
本文基于Mars老师的Java4Android视频。

对象的向上转型

将子类的对象赋值给父类的引用。“上”、“下”要怎么判断呢?我们认为越抽象,越靠上,越具体,越靠下,所以父类是在上面的。

Man m = new Man();
Person p = m;

或者是

Person p = new Man();

举个生活中的例子,这个 茶杯 是一个 杯子。

转型之后,如何使用p 对象呢?p 能使用Man 和Person中哪些方法呢?

  • 一个引用能够调用哪些成员(变量和函数),取决于这个引用的类型。
    p 的类型是Person,因此它只能使用Person类中的成员
  • 一个引用调用的是哪一个方法,取决于这个引用所指向的对象。
    p 是Person类型,但p 指向Man对象。所以它调用的,其实是Man的成员。如果Man和Person中有同名的成员函数,p 调用的,将是Man中的那一个。

对象的向下转型

将父类的对象赋值给子类的引用

//向下转型的前提就是首先进行向上转型
Man m1 = new Man();
Person p = m1;

//括号里是强制类型转换
Man m2 = (Man)p;

为什么要先向上再向下,这不是瞎折腾吗?
--举个例子,就像我们在超市买泡面,厂商先装进袋子里,我们买回家再从袋子里拆出来一样,能不要包装直接买吗~~~

注意: 直接生成的父类的对象,是无法直接向下转型成子类的。就像男人,一定是人,而随便找一个人,却不一定是男人。没了向上转型那一步,就少了约束。

你可能感兴趣的:(Java 对象的转型)