散分!通过例子实现接口,继承,抽象类,虚方法的简单使用

quanpp 2010-12-10 11:41:32
废话不说直接代码。 举个简单的例子来详解!
代码1

先建立一个狗的类(类:其实就是具有共同特征的事物的抽象)
class Dog
{
private string name;
public Dog(string name)
{
this.name = name;
}
public void 叫()
{
Console.WriteLine("旺旺");
}
}
然后建一个猫的类
class Cat
{
private string name;
public Cat(string name)
{
this.name = name;
}
public void ()
{
Console.WriteLine("喵喵");
}
}
比如后面再添加牛,马等等这些动物,我们发现这些有很多相似的地方,那么我们就把他们这些一样的行为都抽象起来,那么现在就是抽象类,和继承出场的时候了


代码2

abstract class Animal //抽象类(动物)
{
private string name;
public Animal(string name)
{
this.name = name;
}
public abstract void jiao(); //因为呢,动物都会叫所以写一个叫的抽象方法,这个呢,需要在派生类中实现

}

class Dog : Animal //继承Animal
{
public Dog(string name):base(name) 调用Animal构造函数
{

}
public override void jiao() //重写派生类的叫的方法,实现自己的叫
{
Console.WriteLine("旺旺");
}
}
class Cat : Animal //继承Animal
{

public Cat(string name):base(name)
{

}
public override void jiao()
{
Console.WriteLine("喵喵");
}
}

这样清晰多了,以后如果要添加,牛,马,羊,之类的都可以继承Animal这个抽象类,因为这些牛马羊都是动物,只有“is a”关系使用继承关系。
接下来我们发现像老鹰这些动物都会飞,但是呢牛马羊不会飞,我们就建立一个飞的接口
代码3

abstract class Animal
{
private string name;
public Animal(string name)
{
this.name = name;
}
public abstract void jiao();


}
interface IFly
{
void Fly();
}
class Dog : Animal
{
public Dog(string name):base(name)
{

}
public override void jiao()
{
Console.WriteLine("旺旺");
}
}
class Cat : Animal
{

public Cat(string name):base(name)
{

}
public override void jiao()
{
Console.WriteLine("喵喵");
}
}
class Laoying : Animal,IFly
{
public Laoying(string name)
: base(name)
{

}
public override void jiao()
{
Console.WriteLine("老鹰叫");
}
public void Fly() //实现接口
{
Console.WriteLine("老鹰在天空中高高的飞翔");
}
}

如果还要添加什么超人啊,飞机啊,都可以继承IFly的接口,去实现Fly()的方法。
接口简单理解就是一种约定,使得实现接口的类或结构在形式上保持一致。个人觉得,使用接口可以使程序更加清晰和条理化,不用去管是怎么实现的,具体的实现让继承这个接口的类去实现,如在代码3中,我们定义了一个飞的接口,让继承它的类去实现这个飞的方法,比如这里老鹰,老鹰会飞,那么继承这个接口以后,实现自己是怎么飞的,再比如我玄幻一点,孙悟空,他也会飞,那么他继承这个接口以后,去实现,一个跟头十万八千里,哈哈,是不是很容易理解,虚方法就不贴代码了。
虚方法例子:
简单举个例子,比如说从前有个唱戏的,这个人叫A,A很受欢迎,每次都有很多人来光顾,但是现在他病了,不能唱了,但是呢他有个儿子B,从小受父亲的影响,模仿父亲很像,唱的也很好,这时候B上台去唱了,但是B用自己的方式去唱。最后这场戏很圆满的结束了。

class Fuqin
{
public virtual void Chang()
{
Console.WriteLine("我是父亲,我用我的方式去唱");
}
}
class Erzi : Fuqin
{
public override void Chang()
{
Console.WriteLine("我是儿子,我用我的方式去唱");
}
}

就这样简单接收下虚方法

总结:今天偶然看到有人发帖问道接口的作用,抽象类的作用等等,我就想 写一个这样的简单列子,通俗的去讲一下!希望能对大家有帮助,有什么建议也可以提! 中午了,去吃饭了!
...全文
393 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun453460205 2012-06-30
  • 打赏
  • 举报
回复
大话设计模式的原版!!也不声明一下!!
huanshayi 2010-12-10
  • 打赏
  • 举报
回复
接分~呵呵~做的还是小项目,没用过接口,就懂一点那么回事
andy110008 2010-12-10
  • 打赏
  • 举报
回复
新手领教了,谢谢楼主。
ycproc 2010-12-10
  • 打赏
  • 举报
回复
好例子 比尔盖茨 该看看了
flyerwing 2010-12-10
  • 打赏
  • 举报
回复
关键是分类区分.
cxx1997 2010-12-10
  • 打赏
  • 举报
回复
这么基础啊
#blackheart 2010-12-10
  • 打赏
  • 举报
回复
ty0952 2010-12-10
  • 打赏
  • 举报
回复
learning!!!
bloodish 2010-12-10
  • 打赏
  • 举报
回复
讲的挺好,
不过中文+拼音+英文的命名方式欠妥,至少看代码的人会觉得很不舒服.
anbin0814 2010-12-10
  • 打赏
  • 举报
回复
接分,随便问问

分层的时候

业务规则 是不是用静态类好些,
pxynet 2010-12-10
  • 打赏
  • 举报
回复
纯为接分...
深海之蓝 2010-12-10
  • 打赏
  • 举报
回复
class Laoying...
langkun611 2010-12-10
  • 打赏
  • 举报
回复
通俗易懂就是王道!
bastenf 2010-12-10
  • 打赏
  • 举报
回复
很清楚啊。。。
quanpp 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 nofc2006 的回复:]
很清晰和容易理解的例子,很适合新手,帮顶
[/Quote]
是啊,我觉得要通过例子,然后通俗的去讲更便于新手区理解,我也发现总有人问,接口的作用啊,继承啊等等,问是没有问题,但是总问就有问题了,所以我就直接开一贴,来通俗的讲一下,希望对新手有帮助!
whrspsoft3723 2010-12-10
  • 打赏
  • 举报
回复
讲的挺好
24K純帥 2010-12-10
  • 打赏
  • 举报
回复
很基础。。
Metrosexual 2010-12-10
  • 打赏
  • 举报
回复
讲的好。。
ttyyadd 2010-12-10
  • 打赏
  • 举报
回复
讲的挺好,很清楚。
hanchunsheng 2010-12-10
  • 打赏
  • 举报
回复
加载更多回复(4)

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧