java反多态的代码_Java多态性代码详解
/*
多態性
1.一個事物的多種形態
2.父類的引用指向子類的對象
3.多態的使用:虛擬方法調用
有了對象的多態性之后,編譯期只能調用父類中聲明的方法,但在運行期,實際執行的是子類重寫的方法
編譯看左邊,運行看右邊
4.多態性使用前提
① 類的繼承關系
② 方法的重寫
5.對象的多態性,只適用于方法,不適用于屬性
面試題:多態性是編譯時行為還是運行時行為
答案:運行時行為,方法調用是在運行時確定的,在編譯期無法確定
*/
public static void main(String[] args) {
Person p1 = new Person();
p1.eat();
Man m = new Man();
m.eat();
m.age = 25;
m.makeMoney();
System.out.println("*******************************");
//對象的多態性:父類的引用指向子類的對象
Person p2 = new Man();
// Person p3 = new Woman();
//多態的使用,當調用子父類同名同參數的方法時,實際執行的是子類重寫父類的方法
p2.eat();
p2.walk();
//p2.makeMoney();--不能調用子類獨有的方法
//有了對象的多態性以后,內存中實際加載了子類特有的屬性和方法,
//但是由于變量聲明為父類類型,導致編譯時只能調用父類中聲明的屬性和方法。
//如何調用子類特有的屬性和方法
//使用強制類型轉換符---向下轉型
Man m1 = (Man)p2;
m1.makeMoney();
//使用強制轉換時,可能出現異常--ClassCastException
// Woman w1 = (Woman) p2;
// w1.goShopping();
/*
instanceof關鍵字的使用
a instanceof A:判斷對象a是否是類A的實例。如果是,返回true,反之返回false
如果a instanceof A返回true,a instanceof B也返回true,
則B為A的父類
*/
//使用情景,為了避免向下轉型時出現異常,在轉型之前先進行instanceof判斷
if(p2 instanceof Woman){
Woman w1 = (Woman) p2;
w1.goShopping();
System.out.println("*****woman******");
}
if(p2 instanceof Man){
Man m2 = (Man) p2;
m2.makeMoney();
System.out.println("*****man******");
}
//問題一:編譯時通過,運行時不通過
// Woman w1 = (Woman) p2;
// w1.goShopping();
// Person p3 = new Person();
// Man m3 = (Man)p3;
//問題二:編譯時通過,運行時也通過
Object obj = new Woman();
Person p = (Person)obj;
p.walk();
//問題三:編譯時不通過
// Man m4 = new Woman();
}
總結
以上是生活随笔為你收集整理的java反多态的代码_Java多态性代码详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天津泰达航母主题公园怎么走最省时间
- 下一篇: java美元兑换,(Java实现) 美元