一、繼承(is a)
Cat is a Anial(貓是一個動物)
凡是能夠滿足is a 的表示“繼承關係”
A extends B
二、關聯(has a )
I has a pen//我有一個筆
凡是能夠滿足has a 關係的表示"關聯關係"
關聯關係通常以"屬性"的形式存在。
A{
B b;
}
三、實現(like a )
Cooker like a FoodMenu//廚師像一個菜單一樣
凡是能夠滿足like a 關係的表示"實現關係"
實現關係通常是:類的實現接口。
A implements B
四、代碼上的體現
publicclassTest{
publicstaticvoidmain(String[]args){
//實例化廚師
ChinaCookeryinpin=newChinaCooker();
JanpanCookerjunshui=newJanpanCooker();
//實例化顧客
Customerxiaowei=newCustomer(yinpin);
//顧客想吃中國菜
xiaowei.order();
}
}
//菜單接口
interfaceMenu{
voidCaihua();
voidChicken();
}
//顧客
classCustomer{
MenuM;
publicCustomer(){
}
publicCustomer(Menum){
M=m;
}
publicvoidorder(){
M.Caihua();
M.Chicken();
}
}
//中國廚師
classChinaCookerimplementsMenu{
@Override
publicvoidCaihua(){
System.out.println("中國廚師做的菜花");
}
@Override
publicvoidChicken(){
System.out.println("中國廚師做的雞塊");
}
}
//日本廚師
classJanpanCookerimplementsMenu{
@Override
publicvoidCaihua(){
System.out.println("日本廚師做的菜花");
}
@Override
publicvoidChicken(){
System.out.println("日本廚師做的雞塊");
}
}
分析:這段代碼其實就利用了has a 的關係,顧客有菜單,所以在顧客的類中可以聲明一個菜單的屬性,同時也體現了is a 在日本廚師和中國廚師都實現了菜單這個接口。這樣如果再增加一個美國廚師也就不用修改代碼,直接實現菜單接口就可以了,同時,接口的利用也是體現出了多態。