黑马程序员--面向对象的关键技术
---------------------- <a href="http://net.itheima.com/" target="blank">Windows Phone 7手机开发</a>、<a href="http://net.itheima.com/" target="blank">.Net培训</a>、期待与您交流! ----------------------
对于一些C#的初学者,类似于面向对象中的多态、接口、抽象、不是能很好的理解,本帖只针对一些初学者对这几个概念不是很理解的人看,牛人请绕道额就不要浪费时间了哈!第一次发帖,不喜勿碰额!
我一个一个来就举一些简单易懂的例子!
一、多态
直接上例子:
using System;//包含基本类和基类
using System.Collections.Generic;//定义泛型集合的接口和类
using System.Linq;//支持语言集成查询
using System.Text;//包含用于字符编码等功能的对象
namespace Test
{
class Program
{
static void Main(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("音乐");
}
}
}
运行结果:
总结:思想是,从基类中派生出三个类,在这三个类中重载基类的方法,然后重新调用派生类中的方法。因为每一次重载的功能都不一样,所以就实现了多态!
二、接口(interface)
还是用一个例子来说明:
using System;//包含基本类和基类
using System.Collections.Generic;//定义泛型集合的接口和类
using System.Linq;//支持语言集成查询
using System.Text;//包含用于字符编码等功能的对象
namespace Test
{
class Program
{
static void Main(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 void Main(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("大家好!我是龙腾!");
}
}
}
运行结果:
总结:抽象类可以拥有抽象成员,但是不能直接被实例化,并且没有代码体,它的执行方法是在其派生类中实现的!注意,只要这个类中有一个方法定义为抽象方法,那么这个类必须定义为抽象类!
以上只是我个人的一些小的学习感悟,不喜勿碰额!!!!希望能帮到那些需要帮到的人!
本人QQ:946478845 在黑马群 希望和大家一起交流学习!
---------------------- <a href="http://net.itheima.com/" target="blank">Windows Phone 7手机开发</a>、<a href="http://net.itheima.com/" target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://net.itheima.com/" target="blank">http://net.itheima.com/</a>
|