多态之向上、向下转型

在多态中转型分为两种:向上转型、向下转型。

刚学的时候看到这两个词不明白什么意思,后来查了下得到的答案,向上转型就是把爹当儿子用,向下转型就是将儿子当爹。

但是向下转型的时候,直接强制转换会爆出错误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();
  }
 
  
    
   
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值