向上转型和向下转型

来源:互联网 发布:软件测试的思路 编辑:程序博客网 时间:2024/05/08 01:36

先说名称由来,之前估计我也说过,这两个概念自然离不开类(class)的复用,也就是继承。在继承结构上,基类(父类)在顶部,下面是扩展类(子类),来张图,形象的看一看..........向上、向下这个概念应该明白什么原因了吧?(基类永远在顶部)


图示:红圈处是Android中,Activity的继承结构,虽然不是图形式的啊,最上层的是基类Object,最下面就是Activity(当然这里用的全称 包名 + 类名)


3、向上转型:父类引用指向子类对象。

Father f = new Son();

4、向下转型:子类引用指向父类引用的子类对象 (听的拗口不?哈哈)。 通俗的说就是子类实例对象赋值给父类引用,然后父类引用又要赋值给子类引用,这个过程就是向下转型。

Father f = new Son();Son s = (Son)f; //看语法,要有(类型)

5、上酸菜,例子。 两个类哈,看名字清晰吧? 父类、子类一目了然

public class Father {          public Father(){                    super();           }}


public class Son extends Father{          public Son(){                   super();            }}


public class Main{          public static void main(String args[]) {                        Father f = new Son(); //向上转型                        Son s = (Son)f;       //向下转型          }}


6、上面看似简单的向上转型与向下转型,当然也会有坑(用坑是不是说的过了,毕竟是你不理解知识造成的呀,哈哈,管它呢,谁让作者牛逼呢)

a、向上转型后,父类引用只能调用与子类共有的实例方法与实例变量,子类独有的实例变量与实例方法将不能调用。多态:动态绑定知识点哈。不明白就自己敲一遍。你看看能不能发消息!!!(通过引用调用方法,也称为向实例对象发送一个消息)

b、注意向下转型的前提条件:首先父类引用指向一个子类实例对象。。。。这样绝对不可以Father father = new Father(); Son s = (son)father; 不好意思,直接抛给你ClassCastException!!即父类实例对象绝对不能强制转换为子类的实例对象

0 0
原创粉丝点击