标签:
话说小镇上开了一家宠物食品店,小动物们可以去买零食吃,大家都非常高兴,猫咪啊,狗狗啊,猪猪啊……都约好了一起去!
/*
* 这是一只Dog类,由于门口没有写规范,它们不知道自己要说什么
* */
public class DogPet {
}
/*
* 这是一只Cat类,由于门口没有写规范,它们也不知道自己要说什么
* */
public class CatPet {
}
/*
* 这是一只Pig类,由于没有规范,它们也不知道说什么
* */
public class PigPet {
}
/*
* 店小二类,他主要工作是卖食品,怎么卖呢?嗯,仔细看看进来的是什么动物,然后再卖给它们零食
* */
public class Waiter {
//如果是猫,就卖小鱼
public void sell(CatPet cat){
System.out.println("你是猫咪,给你小鱼干");
}
//如果是狗,就卖骨头
public void sell(DogPet dog){
System.out.println("你是旺财,给你骨头");
}
//如果是猪猪,就卖青菜
public void sell(PigPet pig){
System.out.println("你是噜噜,给你青菜");
}
}
/*
* 如果镇上有100种小动物,那店小二得要学会辨认100次,而且要记住他们分别要买什么,好累哦……
* */
/*
* 动物们都来到商店,准备开始购物了
* */
public class Shopping{
public static void main(String args[]){
Waiter waiter = newWaiter();//有一个店小二
CatPet cat = newCatPet(); //来了一只喵喵
DogPet dog = newDogPet(); //来了一只汪汪
PigPet pig = newPigPet(); //来了一只猪猪
//交易开始了,店小二根据动物来判断要什么
waiter.sell(cat);//店小二抱起猫,瞧了瞧,哦,这是猫,它是要吃鱼的
waiter.sell(dog);//店小二抱起狗,瞧了瞧,哦,这是狗,它是要吃骨头的
waiter.sell(pig);//店小二抱起猪,瞧了瞧,哦,这是猪,它是要吃青菜的
}
}
/*======================
********输出结果如下******
你是猫咪,给你小鱼干
你是旺财,给你骨头
你是噜噜,给你青菜
*
*虽然可以完成交易,但是如果这时候有个小兔子来了,但是店小二不认识怎么办呢?那是不是还得去查呀?所以得修改店小二的方法,增加一个兔子方法。
*而且如果有100个小动物,那是不是得要修改100次呢?由此可以看出,对象多了,店小二的工作压力好大呀。
*======================
* */
-----------------------------------------------故事分割线------------------------------------------------
终于,小动物们越来越多,店小二越来越累,后来有一次卖错了,挨批评了,于是就不干了,老板着急啊,想了个办法,在门口竖了块牌子,写着:进点的小动物要自己说出要买什么吃的!不然不给卖!这就好比是一个接口,就是一种规范:规定了动物们必须按照它的要求去做,说出零食名称。至于说什么,那就是小动物们的事情咯……
/*
* 门口定了一项规定:大家要来买零食,必须得要说出来,也就是实现buy()方法。
* */
public interfaceSpeakOut {
public void Speak();
}
/*
* 小狗看到了之后,知道新规定,于是实现该方法
* */
public class DogPetimplements SpeakOut{
@Override
public void Speak() {
// TODO Auto-generatedmethod stub
System.out.println("我是一只狗,要买骨头!");
}
}
/*
* 小猫看到了之后,知道新规定,于是实现该方法
* */
public class CatPetimplements SpeakOut{
@Override
public void Speak() {
// TODO Auto-generatedmethod stub
System.out.println("我是一只猫,要买小鱼!");
}
}
/*
* 新来的店小二不知道他们要什么,但是没关系,动物们自己会说出来的。
* 没有实现接口的当然就不能卖给它了,因为它不知道要什么,店小二也不知道卖什么。
* */
public class Waiter {
public void sell(SpeakOut pet){ //没有遵守该规定的就不卖,所以传进参数必须是规定。
pet.Speak();
}
}
/*
* 猫和狗来商店了,开始进行交易了,可以卖给他们食品
* */
public class Shopping{
public static void main(String[]args){
// DogPet dog = newDogPet(); //实例化对象,来了一只狗顾客
// CatPet cat = newCatPet(); //实例化对象,来了一只猫顾客
// 两种实例化方法都行
SpeakOut dog = newDogPet(); //实例化对象,来了一只狗顾客
SpeakOut cat = newCatPet(); //实例化对象,来了一只猫顾客
Waiter waiter = newWaiter(); //实例化一个店小二
waiter.sell(cat); //店小二开始卖东西了,只负责抱起猫,猫自己会说要什么
waiter.sell(dog); //抱起狗,狗自己也会说要什么
}
}
/*
* =========================
* 输出结果:
* 我是一只猫,要买小鱼!
我是一只狗,要买骨头!
* java语言的特点就是面向对象,什么意思呢?故事里猫和狗都是对象,发挥对象的特征,例如故事里让猫和狗自己告诉店小二要什么,
* 而不是由店小二根据小动物来判断,要给它卖什么,将这个操作交给了小动物们。
* 所以如果小猪看到了,它只需要实现方法就可以来店里买了
* 不是把所有的功能写在主函数或者调用函数中,这样店小二就轻松很多了
* =========================
**/
小猪急急忙忙跑过来,没有看到规定,那么能卖给它么?肯定不可以,要想买,可以呀,遵守规定,实现方法,自己说出来要什么。
这就是对接口最通俗的解释,接口的作用就是统一规范,也就是让大家知道这个是做什么的,但是具体怎么做,不用知道,由实现者自己去做。
标签:
原文地址:http://blog.csdn.net/mutoujian126/article/details/44019481