(上溯造型定义:java允许把一个子类对象直接复制给一个父类引用变量,自动完成类型转换,这种语法现象称为上溯造型。
下溯造型回到它自己所在的类(强制转换):一个对象被溯型为父类或接口后还可以再被下溯造型,回到它自己所在的类。注意,只有曾经上溯造型过的对象才能进行下溯造型,对象不允许不经过上溯造型我直接下溯造型,否则运行时会抛出
上溯造型的优点是用户可以把不同类型的子类上溯为同一个父类造型,以方便地统一处理它们;缺点是损失掉了子类新扩展增加的属性和方法(覆盖父类的方法不会损失掉),除非再进行下溯造型,否则这部分属性和方法不能被访问)以上文字引用博客
以下以“黄”sir勾勾为例
//step1:新建一个animal类
class animal{
void shout() {
System.out.println("wangwangwang");//建一个动物叫的方法
}
/*下面建一个static方法,过程是以animal对象为参数,实现该方法。
我认为这里这样写的作用是使得在已经建立子类的对象
(比如下面的dog) 后不用再新建animal类即可直接通过animal.test()
调用shout方法,因为shout方法不是静态方法不能直接通过名字调用
而是需要实例animal。
*/
static void test(animal i) {
i.shout();
}
}
class dog extends animal{
void sleep() {
System.out.println("zzz");
}
}
class Test{
public static void main(String[] args) {
animal huang=new dog();//把dog huang上溯造型,也就是把huang变成animal对象
animal.test(huang);
//huang.sleep();这时候不能运行,因为上溯造型后huang损失了新建的sleep方法,只有父类方法
dog huan=(dog)huang;//下溯造型,耶嘿,也就是把huang变回dog类对象
huan.sleep();//好了,这时候可以zzz了。
}
}