java向上转型和向下转型该如何理解

作者:小橘猫 | 创建时间: 2023-06-15
相信许多学习java的朋友一定会遇到这样的情况,一个被new出来的类对象,赋值给了自己的父类对象,这个是什么情况哪?该如何理解。在java里这个叫向上转型。还有一种情况的向上转型,new出来一个类的对象赋值给了此类实现的一个接口,我称之为瘦...
java向上转型和向下转型该如何理解

一、类的向上转型和向下转型

首先要编写测试程序,按如下的目录结构,创建类。

Animal.java。此类是基类,Cat类继承此类。此类有一个成员变量head和一个成员方法getHead()。方法返回head的值。

Cat.java。此类是Animal的子类,Cat类重新添加了一个成员变量eyes和一个成员方法getEyes()。方法返回eyes的值。

testClass.java。这个是我们的测试类。此时我们就来分析一下类的向上转型和向下转型。 向上转型:可以看出把Cat()的对象赋值给naimal时,不再有用getEyes()方法,此方法是Cat中的方法,而Animal类中无此方法。这说明animl对象发生了“瘦身”。 向下转型:这里要注意一点,向下转型是你向上转型后才能执行的操作。所以把转型后的animal赋值给cat_s,此时却发现cat_s对象“增肥”了,不仅能访问Animal类成员,还能访问Cat中新增的成员。

二、接口的向上转型和向下转型

编写测试程序IAnimal.java接口。此接口有一个未实现的方法sing();

编写Tiger.java类,实现IAnimal类,并新增成员变量head和成员方法getHead(),方法打印head的值。

编写测试程序testInterface.java。此时我们来分析一下接口的向上转型和向下转型。 向上转型:可以看到new出来的Tiger对象赋值给了IAnimal接口变量,此时animal只能访问接口的方法sing(),而不能访问Tiger类中新增的成员方法。 向下转型:把animal赋值给了Tiger类对象后,发现tiger既可以访问接口方法,也可以访问Tiger类中新增的方法。

接下来我们来看一下,在接口转型后animal.sing()的输出结果,“老虎在吼叫”,说明,虽然"瘦身"了,但是接口变量animal调用的还是实现了此接口的类(Tiger)的方法。

点击展开全文

更多推荐