Java如何在代码体现面向对象和多态(2)-is a(继承)、has a (关联)、like a(实现)(什么时候在类中定义另一个类?)

一、继承(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 在日本厨师和中国厨师都实现了菜单这个接口。这样如果再增加一个美国厨师也就不用修改代码,直接实现菜单接口就可以了,同时,接口的利用也是体现出了多态。

猜你喜欢

转载自blog.csdn.net/MyxZxd/article/details/105933185
今日推荐