Java強制轉換問題

package jiCheng_duoTai;

public class QZZH {//強制轉換
 //Java中強制轉換成子類的原則:父親型的引用指向的是哪個子類的實例,就能轉換成哪個子類的引用。
  public static void main(String[] args) {
   Person pe = new Boy();//將父類的引用指向Boy,將開闢的Boy地址賦給pe
   Boy boy = (Boy) pe ;//強制轉換:將pe強制轉換爲Boy類的對象
   boy.eat();
//   pe.eat();
   Person e = new Girl();
   Girl girl = (Girl)e;
   girl.eat();
//   e.eat();
   Person per = new Girl();
//   Boy b =(Girl)per;//報錯語句
  }
}


class Person{
 public void eat() {
  System.out.println(" The people were eating ");
 }
}

class Boy extends Person{
 public void eat() {
  System.out.println(" The Boy were eating ");
 }
}
class Girl extends Person{
 public void eat() {
  System.out.println(" The girl were eating ");
 }
}

打印結果: The Boy were eating
原因:當Boy實例化後將引用地址返回傳給pe,這是pe引用實際指向的是Boy,所以將pe轉換成Boy能成功
若在main方法中 添加:Person p = new Girl(); Boy b=(Boy)p; b.eat();
這運行後會提示:Girl cannot be cast to Boy ( 不能將女孩轉換爲男孩的意思 )
原因:當Girl實例化後將引用地址返回傳給p,這是p引用實際指向Girl,將p轉換成Boy也就是說將Girl轉換爲Boy,肯定不能成功
簡單的理解就是男孩女孩都是人沒錯,但是說女孩是男孩就錯了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章