- 向上转型
引用所能够调用的方法取决于引用的类型,而如何具体的实现该方法取决于对象的类型。
定义了父类为A类,子类为B类,子类B覆盖了父类的fun1()方法,添加了自己的fun3()类,这是一个对象向上转型的关系,但是A类型的引用a虽然可以调用fun1()方法,但是不能通过A类引用a调用子类对象独有的fun3()方法!!!
引用a为A类型,所以通过引用a只能调用A类型中包含的方法( fun1()和fun2()),而不能调用B类中的fun3()。也就是说A类引用只能向指向的对象发送A类中包含的方法,具体的实现由指向的对象的类型来决定。
- 向下转型
在对象进行向下转型时,必须首先发生对象向上转型,否则将出现对象转换异常。
A类型引用指向的是一个A类对象,把A类引用转换成B类引用,此时就可以发送调用B类方法的命令给指向的对象,而指向的对象为A类对象却并不含B类中非共有的方法,对象根本就没有实现这个方法,怎么去执行方法呢?因此就会产生错误。
即
A a=new B(); //是可以的
`A a = new A(); //是不可以的