慕的地1533170
2016-04-04 17:03:43
如果我先創(chuàng)建了一個(gè)父類public class Animal {? ? ?public int age; } //賦予了屬性,沒(méi)有初始化值, 然后創(chuàng)建個(gè)子類 ,繼承父類,但是每種動(dòng)物活著的年齡不同,所以我創(chuàng)建的子類中對(duì)age這個(gè)屬性進(jìn)行了賦值:public class dog extends Animal {public int age=20; ? }//第一個(gè)子類public calss cat extends Animal{public int age=30; }//第二個(gè)子類.然后在測(cè)試類里進(jìn)行調(diào)用運(yùn)行public class Chaxun {public static void main(String[] args) { // TODO Auto-generated method stub? ? ? ? ? ?Animal age1=new dog();? ? ? ? ? Animal age2=new cat();System.out.println("狗的壽命是"+age1.age)System.out.println(“貓的壽命是"+age2.age) ? ? ? ? }} ? ? ? //這樣輸出為什么age的值是0,子類中不是進(jìn)行賦值了嗎??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
4 回答
已采納

Its_forever
TA貢獻(xiàn)361條經(jīng)驗(yàn) 獲得超328個(gè)贊
你這兩句: Animal?age1=new?dog(); Animal?age2=new?cat(); 相當(dāng)于向上轉(zhuǎn)型,age1和age2都指向的是animal這個(gè)父類。 所以age1.age和age2.age都是輸出父類的age,默認(rèn)值為0。 如果你想輸出之類的age,改成這樣: dog?age1=new?dog(); cat?age2=new?cat();

儁破孩
TA貢獻(xiàn)19條經(jīng)驗(yàn) 獲得超5個(gè)贊
在多態(tài)中,注意屬性沒(méi)有多態(tài)的概念,只有方法才有多態(tài)的概念。屬性的值是多少由聲明時(shí)類型(也就是編譯類型)的對(duì)象決定,而方法的調(diào)用由實(shí)際對(duì)象的類型(也就是運(yùn)行時(shí)類型)所決定。如果這里子類去重寫父類的某個(gè)方法,那么這里你去調(diào)用重寫的方法,會(huì)出現(xiàn)什么樣的情況呢?自己去實(shí)踐o(∩_∩)o

星際怪物
TA貢獻(xiàn)31條經(jīng)驗(yàn) 獲得超10個(gè)贊
Animal age1 = new dog(); //age1?向上轉(zhuǎn)型為Animal,
System.out.println(...., age1.age)//此處 age1.age 就是 super.age,為0
添加回答
舉報(bào)
0/150
提交
取消