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,肯定不能成功
簡單的理解就是男孩女孩都是人沒錯,但是說女孩是男孩就錯了