public interface 动物 {
string 吃();
}
public class 狗 : 动物
{
public string 吃()
{
return "狗在吃";
}
}
public class 猫:动物
{
public string 吃()
{
return "猫在吃";
}
}
class Program
{
static void Main(string[] args)
{
猫 m = new 猫();
m.吃();
狗 g = new 狗();
g.吃();
//问题在这。接口在这里我怎么都用不上,那位告诉我可以用上接口呢?
//除非名称约束是相同的,在应用上接口不是说带来了多态吗?应该如何写?
//也就是,或者比喻用户选择什么动物就显示吃的方法也可以?
}
}
------解决思路----------------------
猫 m = new 猫();
m.吃();
狗 g = new 狗();
g.吃();
改成
动物 m = new 猫()
动物 g =new 狗();
实际暴露给外面时,m,g都声明为了动物,外部根本不知道具体是什么动物,也不需要关心是什么动物,他们要的只是调用下吃的方法,因为这是一个动物必定有的行为(接口约束)
------解决思路----------------------
猫 m = new 猫();
Console.WriteLine(m.吃());
狗 g = new 狗();
Console.WriteLine(g.吃());

没有问题呀!
------解决思路----------------------
正解也!一语道出接口的精髓。
动物 m = new 猫();
动物 g =new 狗();
接口和父类很像,理解了派生类转换为父类,再稍微转一下,就理解类转换为接口了~~
------解决思路----------------------
1#讲的很清楚了
接口有个很相似的伙伴----抽象类,C#中抽象类和接口
这个帖子讲的很清晰。
------解决思路----------------------
动物[] 动物们 = new 动物[] { new 猫(), new 狗() };
foreach (var obj in 动物们)
{
obj.吃();
}
------解决思路----------------------
我当年也和你一样 当当只是看接口的知识点 是不能让你明白 多态 扩展的好处的~
要看了设计模式后 才知道
让你先明白多态吧
public interface 动物()
{void 移动();}
public class 鸟:动物
{public void 移动(){我是用飞的} }
public class 蛇:动物
{public void 移动(){我是用爬的} }
public class 鱼:动物
{public void 移动(){我是用游的} }
现在假设他们都参加一个动物奥运会 看谁的速度最快
list<动物> 参赛者 = new list<动物>//不在这里指定具体特定的类型,因为谁都可以参加
参赛者.Add(new 鸟())
参赛者.Add(new 蛇())
参赛者.Add(new 鱼())
参赛者.Add(new 袋鼠())
比赛开始 预备 跑
foreach(var item in 参赛者)
{
参赛者.移动();
//这里不用管具体是什么动物,只要他实现了移动方法,我调用了,
各种的动物会展示他们各种的移动方式,这就是多态
}
------解决思路----------------------
之前那问题写成:动物 m = new 猫() ;动物 g =new 狗();就用到接口了,接口只是指定了一些行为,不关心具体对象。比如你这个接口用一个非动物的类来实现也是可以的。就像接口定义了fly(),飞机可以fly,鸟也可以fly。
至于多态,就是同样行为,不同对象有不同实现(猫的吃和狗的吃是不同的)。如果不使用接口,你就要将动物类的吃方法,改成一个接收动物类型的参数的方法,然后,在方法里分别实现,如果有新加动物,或者要改已有动物的吃法,就要不断修改这儿吃方法。这就违反外开内闭原则。相反,使用多态,新加动物实现吃法就行,不用动已有的其他动物的吃法。
------解决思路----------------------
《Head First 设计模式》
http://www.cnblogs.com/abcdwxc/archive/2007/10/30/942834.html
http://blog.csdn.net/lovelion/article/details/17517213