Java extends和C的繼承有很多相似之處,但也存在一些不同點(diǎn)。首先,Java是面向?qū)ο蟪绦蛟O(shè)計(jì),而C則是過(guò)程性語(yǔ)言。Java實(shí)現(xiàn)繼承是通過(guò)extends關(guān)鍵字實(shí)現(xiàn)的,而C使用struct結(jié)構(gòu)體實(shí)現(xiàn)繼承。
//C代碼: struct Animal { char name[30]; int age; }; struct Dog { struct Animal baseInfo; char type[20]; };
在Java中,一個(gè)類(lèi)只能繼承一個(gè)父類(lèi)。但Java中支持接口(interface)繼承(implements)多個(gè)父接口,使得類(lèi)能夠具有多個(gè)不同的行為(behavior)。而C中,結(jié)構(gòu)體繼承時(shí)只能繼承一個(gè)父結(jié)構(gòu)體。
Java中:
public interface Animal { public void move(); } public interface Mammal { public void feedMilk(); } public class Dog implements Animal, Mammal { public void move() { System.out.println("Dog is running"); } public void feedMilk() { System.out.println("Dog is feeding milk"); } }
在C中,則需要用到指向父結(jié)構(gòu)體的指針,通過(guò)指針調(diào)用父結(jié)構(gòu)體的成員。
//C代碼: struct Animal { char name[30]; int age; }; struct Dog { struct Animal* pBaseInfo; char type[20]; }; void feedMilk(struct Animal* pBaseInfo) { printf("%s is feeding milk", pBaseInfo->name); } void feedMilk_Dog(struct Dog* pDog) { feedMilk(pDog->pBaseInfo); }
Java extends和C的繼承的實(shí)現(xiàn)方式雖然不同,但都能達(dá)到同樣的效果。需要根據(jù)實(shí)際需求選擇合適的繼承方式。