請問為什么在petMap.put那里,Pet類的對象可以用new Cat(),new Dog()構(gòu)造,這跟構(gòu)造器有什么不同?涉及到了具體哪塊知識?并且為什么在輸出時,Cat Dog也能出現(xiàn)在輸出結(jié)果里?懇請點撥!
import typeinfo.pets.*
import java.util.*
import static net.mindview.util.Print.*
public class PetMap {
public static void main(String[] args) {
Map<String, Pet> petMap = new HashMap<String, Pet>();
petMap.put("My Cat", new Cat("Molly"));
petMap.put("My Dog", new Dog("Ginger"));
petMap.put("My Hamster", new Hamster("Bosco"));
print(petMap);
Pet dog = petMap.get("My Dog");
print(dog);
}
}
/* Output:
{My Cat=Cat Molly, My Hamster=Hamster Bosco, My Dog=Dog Ginger}
Dog Ginger你說的應(yīng)該是繼承吧?定義一個接口,然后用類去實現(xiàn),就可以實現(xiàn)你說的構(gòu)造了(父類引用指向子類)。是java三大特種之一的多態(tài)里面的內(nèi)容。
例子:
接口如下:
interface Pet {
void eat();
}
實現(xiàn)類如下:
class Cat implements Pet{
@Override[override]
public void eat() {
System.out.print("貓吃魚");
}
}
class Dog implements Pet{
@Override[override]
public void eat() {
System.out.print("狗吃骨頭")
}
}
測試類代碼如下:
class Test {
public static void main(String[] args) {
Pet a = new Cat();
Pet b = new Dog();
a.eat();
b.eat();
}
}很簡單,繼承。
‘Pet類的對象可以用new Cat(),new Dog()構(gòu)造’,題主這句話我看著總覺得有點別扭;從貼的代碼來看 ,Cat和Dog這兩個類肯定是繼承或者了Pet類的,而這句話用白話來說就是貓類和狗類都是寵物這個基類的子類,而所有能用基類對象的地方都應(yīng)該能用子類對象,這是java的語言特性,也好理解,因為所有的貓和狗都是寵物,但不是所有的寵物都是貓和狗;
再說‘并且為什么在輸出時,Cat Dog也能出現(xiàn)在輸出結(jié)果里’,想必題主是在Cat和Dog類的構(gòu)造器里加了輸出的,這里要說的是父類和子類的構(gòu)造器調(diào)用順序,當Pet dog = new Dog("xxx")這句話執(zhí)行的時候,會先去調(diào)用父類的構(gòu)造器(如果有的話),然后會調(diào)用子類的構(gòu)造器,這個時候,Dog的類構(gòu)造器中加的print就會執(zhí)行,并且是不同的子類都會有不同的輸出。
相對來說很基礎(chǔ)的一個問題,說到底最根本的就是父類子類的替換,具體你可以看看里氏代換原則。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。