您的位置:首页 > 其它

面向对象的关键技术(多态、接口、抽象)

2012-03-24 11:27 417 查看
对于一些C#的初学者,类似于面向对象中的多态、接口、抽象、不是能很好的理解,本帖只针对一些初学者对这几个概念不是很理解的人看,

牛人请绕道额就不要浪费时间了哈!我一个一个来就举一些简单易懂的例子!

多态
直接上例子:

using System;//包含基本类和基类

using System.Collections.Generic;//定义泛型集合的接口和类

using System.Linq;//支持语言集成查询

using System.Text;//包含用于字符编码等功能的对象

namespace Test

{

class Program

{

static voidMain(string[] args)

{

MyHobby[]hobbies=new MyHobby[4];

hobbies[0] = new MyHobby();

hobbies[1] = new Writing();

hobbies[2] = new Programing();

hobbies[3] = new Music();

foreach(MyHobby obj in hobbies)

{

obj.Interest();

}

Console.ReadKey();

}

}

/// <summary>

/// 基类 MyHobby

/// </summary>

class MyHobby

{

public virtual void Interest()

{

Console.WriteLine("我的爱好是:");

}

}

/// <summary>

/// Writing 继承 MyHobby

/// </summary>

class Writing : MyHobby

{

public override void Interest()//重载方法Interest()

{

Console.WriteLine("写作");

}

}

/// <summary>

/// Programing 继承 MyHobby

/// </summary>

class Programing : MyHobby

{

public override void Interest()//重载方法Interest()

{

Console.WriteLine("编程");

}

}

/// <summary>

/// Music 继承 MyHobby

/// </summary>

class Music : MyHobby

{

public override void Interest()//重载方法Interest()

{

Console.WriteLine("音乐");

}

}

}


运行结果:



总结:思想是,从基类中派生出三个类,在这三个类中重载基类的方法,然后重新调用派生类中的方法。因为每一次重载的功能都不一样,所以就实现了多态!

接口
还是用一个例子来说明:

using System;//包含基本类和基类

using System.Collections.Generic;//定义泛型集合的接口和类

using System.Linq;//支持语言集成查询

using System.Text;//包含用于字符编码等功能的对象

namespace Test

{

class Program

{

static voidMain(string[] args)

{

UseInterface u = new UseInterface();//创建对象,调用方法

u.SayHello();

Console.ReadKey();

}

}

/// <summary>

/// 定义了一个接口FirstInterface

/// </summary>

interface FirstInterface

{

string Name//定义了一个属性

{

get;

set;

}

void SayHello();//关键定义了方法,但是没有方法体!

}

/// <summary>

/// 既然已经继承了接口,那必须要实现接口中的全部属性,方法等,缺一不可,

/// 例如如果不实现Name属性,程序就会报错!

/// </summary>

class UseInterface : FirstInterface

{

string name = "我的名字叫龙腾!";

public string Name//重新实现接口中的属性

{

get { return name; }

set { name = value; }

}

/// <summary>

/// 实现接口中的方法,这里不需要像多态中用到的 override 改写方法,直接拿过来加上方法体就可!

/// </summary>

public void SayHello()

{

Console.WriteLine("大家好!"+this.name);

}

}

}


运行结果:



总结:接口的本质就是一些方法!但是要使用这些方法必须要按照一定的规则,否则就不能使用。定义接口,其实质就是定义规则,要使用接口,必须在它的规则下进行!

抽象

抽象类和接口有一些相似之处,它们都包含由派生类继承的成员,接口和抽象类都不能直接实例化!(虚的东西你怎么能拿来使用呢对吧?必须要使用第三方的东西来搭桥)

using System;//包含基本类和基类

using System.Collections.Generic;//定义泛型集合的接口和类

using System.Linq;//支持语言集成查询

using System.Text;//包含用于字符编码等功能的对象

namespace Test

{

class Program

{

static voidMain(string[] args)

{

UseMyAbstract u = new UseMyAbstract();//创建对象,调用方法

u.SayHello();

Console.ReadKey();

}

}

/// <summary>

/// 定义一个抽象类MyAbstract

/// </summary>

abstract class MyAbstract

{

public abstract void SayHello();//定义一个抽象方法,同样没有方法体!

}

/// <summary>

///定义一个 UseMyAbstract类 继承 MyAbstract抽象类

/// </summary>

class UseMyAbstract : MyAbstract

{

public override void SayHello()//改写抽象类MyAbstract中的方法SayHello()

{

Console.WriteLine("大家好!我是龙腾!");

}

}

}


运行结果:



总结:抽象类可以拥有抽象成员,但是不能直接被实例化,并且没有代码体,它的执行方法是在其派生类中实现的!注意,只要这个类中有一个方法定义为抽象方法,那么这个类必须定义为抽象类!

以上只是我个人的一些小的学习感悟!希望能帮到那些需要帮到的人!

作者:李正兴 英文名:black_li

出处:http://www.cnblogs.com/longteng1991/

如果,您喜欢这篇文章的话,您可以分享给您的好友,请点击按钮【推荐】

如果,您想更快的阅读我的最新文章,您可以关注我,请点击按钮【关注】

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: