在多态中转型分为两种:向上转型、向下转型。
刚学的时候看到这两个词不明白什么意思,后来查了下得到的答案,向上转型就是把爹当儿子用,向下转型就是将儿子当爹。
但是向下转型的时候,直接强制转换会爆出错误java.lang.ClassCastException(数据转换异常),但是可以使用运算符insanceof来进行转换。还是直接附上例题:
父类:
package Duotai;
public class Instanceof {
String name;//姓名
int age;//年龄
public String getName() { //获取name 值
return name;
}
public void setName(String name) { //修改name值
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<120&&age>0){
this.age = age;
}else{
System.out.print("错误");
}
}
public Instanceof(){
}
public Instanceof(String name,int age){
this.name = name;
this.age = age;
}
public void show(){
System.out.print("大家好!"+"我叫:"+this.name+"\n"+"年龄:"+this.age);
}
}
子类Jieshao:
package Duotai;
public class Jieshao extends Instanceof {
String dizhi;
public String setDizhi(){
return dizhi;
}
public void getDizhi(String dizhi){
this.dizhi = dizhi;
}
public Jieshao(){
}
public Jieshao(String name, int age,String dizhi) {
super(name, age);
this.dizhi = dizhi;
System.out.println("大家好!"+"我叫:"+this.name+"\n"+"年龄:"+age+"\n"+"地址:"+dizhi);
}
public void show(){
super.name = "wwww";//继承父类中的姓名
super.age = 18;//继承父类中的年龄
}
public void shows(){
System.out.println("快看,有灰机!"+"\n"+"称呼:"+name+"\n"+"年龄:"+age+"\n"+"地址:"+dizhi);
}
}
子类Jie:
package Duotai;
public class Jie extends Instanceof {
String yanse;
public String getYanse() {
return yanse;
}
public void setYanse(String yanse) {
this.yanse = yanse;
}
public Jie(){
}
public Jie(String name, int age,String yanse) {
super(name, age);
this.yanse = yanse;
}
public void show(){
System.out.println("俺叫:"+this.name+"\n"+"芳龄:"+age+"\n"+"我的颜色:"+yanse);
}
}
测试类:
package Duotai;
public class Test {
public static void main(String[] arge) {
System.out.println("--------------------");
Instanceof w = new Jieshao("大鸟",20," 我住在火星上");//向上转型。
w.show();
System.out.println("--------------------");
Instanceof s = new Jie("小鸟",22,"火色");//向上转型。
s.show();
System.out.println("--------------------");
// Jie p = (Jie) w;//强制向下转型,并且会在这里爆出数据转换异常的错误。
// p.show();
Jieshao j = (Jieshao) w; //使用instanceof运算符进行向下转型
if (j instanceof Instanceof) {
j.shows();
}
}
}