java当中向上向下转型的作用是什么?向下转型的语法?

2025-04-26 18:26:59
推荐回答(2个)
回答1:

向上转型和向下转型涉及到面向对象三大特性之一的继承,也就是子类和父类之间的关系。

这里以 父类 动物(Animal) 和子类 狗(Dog) 为例:
向上转型:顾名思义,就是把子类强转为父类。代码 Animal a = new Dog();
注意,这里的a是没有办法执行Dog类的独有方法的,因为JVM认为a 是Animal类型的。如果需要使用Dog类独有的方法,就要使用向下转型,也就是通俗意义上的强转。

向下转型:就是把父类强转为子类,代码:
Animal a = new Dog();

Dog d = (Dog)a; // 向下转型,这种写法是完全正确的
/** 下面这种写法会报错 */
Animal a = new Animal();

Dog d = (Dog)a; // 这里会报错,无法转换。

报错的原因很简单,因为你可以说狗是动物,但是你无法说动物是狗。

写了这么多,希望你能明白

回答2:

作用是减少重复代码出现,使代码变得简洁。
向下转型是把父类对象转为子类对象。
例如下面代码:
[java] view plaincopyprint?
package com.wensefu.other1;
public class Girl {
public void smile(){
System.out.println("girl smile()...");
}
}
class MMGirl extends Girl{

@Override
public void smile() {

System.out.println("MMirl smile sounds sweet...");
}
public void c(){
System.out.println("MMirl c()...");
}
}
class Main{

public static void main(String[] args) {

Girl g1=new MMGirl(); //向上转型
g1.smile();

MMGirl mmg=(MMGirl)g1; //向下转型,编译和运行皆不会出错
mmg.smile();
mmg.c();

Girl g2=new Girl();
// MMGirl mmg1=(MMGirl)g2; //不安全的向下转型,编译无错但会运行会出错
// mmg1.smile();
// mmg1.c();
/*output:
* CGirl smile sounds sweet...
* CGirl smile sounds sweet...
* CGirl c()...
* Exception in thread "main" java.lang.ClassCastException: com.wensefu.other1.Girl
* at com.wensefu.other1.Main.main(Girl.java:36)
*/
if(g2 instanceof MMGirl){
MMGirl mmg1=(MMGirl)g2;
mmg1.smile();
mmg1.c();
}

}
}