日期:2014-05-18  浏览次数:21090 次

继承 多态 封装
知道面向对象的特点是继承、多态、封装,可这些在C#中是怎么体现出来的啊!不理解!望高手指点。。帮我完全搞明白面向对象。。谢谢!

------解决方案--------------------
转自http://blog.csdn.net/qoo1983/archive/2007/05/31/1633078.aspx 
读的时候把 Java替换成C#

比较抽象,只是一种概念,刚开始学的时候无需太过于深究,如果要你一上来学JAVA就理解这些东西,有点牵强,你所要做的就是至少看到代码知道这个用到的是什么。 

封装的概念好比一辆汽车,你学开车的时候只需学会诸如踩油门、刹车,转方向盘即可,无需去了解它的发动机是如何发动。 

继承,先说说我对类的理解,类起到的作用有:分类(你所用某个类创建的对象实际上该类的个案)和模板的作用,那么继承则起到了对类再次分类的作用,比如,有个类“动物”,“哺乳动物”继承“动物”,再往下“马”又继承了“哺乳动物”这个类。在这里,我们从下往上讲,首先,我们把某种东西划分出来,叫做“马”(当然还有“牛”,“鱼”等等),接着,我们发现,“马”,“羊”等还有很多共同的特点,于是,我们再次划分出了“哺乳动物”这个类,再次分类,我们则有了“动物”。但在实际开发中,我们一般是从上往下定义的,即先有了“动物”,再有“哺乳动物”,最后有“马”。 

多态,正如上面朋友所说一重写,二重载。用汉字来打个比方,比如“开”这个字,在不同的时候各有的意思,比如“开门”,“开窗”,甚至有“开车”,“开饭”等,具有相同名称但操作不同。具体的实现我就不累述了。 

说说接口吧,在JAVA不支持多继承的,实际上接口起到了类似多继承的作用,一个类只能继承另一个类(或抽象类)但可以实现多个接口。打个比方,“张三”,他是一个“人”,因此他继承了“人”;与此同时,他是一个“司机”,他的平时行为还有“开车”,很显然,这并不能从“人”这个类里继承下来。怎么办?JAVA里只支持单继承,这个时候,接口就起到了作用,它定义了“司机”这个接口,“张三”实现了它,因此,他会开车了。 


------解决方案--------------------
继承 指类间的关系,子类继承父类,子类就可以使用父类中的方法(除私有的private) 也可以重写父类中的虚方法(virtual) 
封装 指 类内部的变量,方法,属性 的私有化 private(类内部可以访问) protected(类内部和子类可访问)
多态, 指同一方法名称 的不同参数形式 getFunction(int a),getFunction(int a,string b),getFunction(int a,string b,bool c)
getFunction(long e ,double d,)这些方法就是getFunctiong的多态

希望对楼主有帮助。 实战中体会会比较深
------解决方案--------------------
类的封装、继承和多态3种特性构成了面向对象程序设计思想的基础,通过这些基础可以最大程度地实现代码的重用,有效地降低了软件的复杂性。通过多态可以逼真地描述客观世界,使得应用程序可以完美地满足用户的要求。本节对类的封装、继承和多态性进行详细讲解。

5.7.1 封装的概念及用途
在C#中可使用类来达到数据封装的效果,这样就可以使数据与方法封装成单一元素,以便于通过方法存取数据。除此之外,还可以控制数据的存取方式。

在面向对象的世界中,大多数都是以类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时,不直接存取类中的数据,而是通过方法来存取数据,如此就可以达到封装数据的目的,方便以后的维护升级,也可以在操作数据时多一层判断。

此外,封装还可以解决数据存取的权限问题,可以使用封装将数据隐藏起来,形成一个封闭的空间,然后就可以设置哪些数据只能在这个空间中使用,哪些数据可以在空间外部使用。如果一个类中包含敏感数据,有些人可以访问,有些人却不能访问。如果不对这些数据的访问加以限制,后果是很严重的。所以在编写程序时,要对类的成员使用不同的访问修饰符,从而定义他们的访问级别。

5.7.2 封装的使用
ch0505实例位置:mr\05\sl\Ex05_05

下面通过实例来介绍类的封装性在实际中的应用。

程序开发步骤如下。

(1)启动Visual Studio 2005,新建一个控制台应用程序,命名为Ex05_05。

(2)该项目中添加一个类文件,默认名为Class.cs,在该文件中定义一个方法,用来输入“类的封装”字符串,代码如下:

public void OutMethod()

{

Console.WriteLine("类的封装");

}

(3)在自动生成的Program.cs文件中调用Class.cs类文件中封装的方法,代码如下:

class Program

{

static void Main(string[] args)

{

Class1 class1 = new Class1();

class1.OutMethod();

}

}

实例运行结果如图5.5所示。



图5.5 类的封装性

5.7.3 继承的概念及用途
继承是面向对象编程最重要的特性之一。任何类都可以从另外一个类继承,这就是说,这个类拥有它继承的类的所有成员。在面向对象编程中,被继承的类称为父类或基类。在C#中提供了类的继承机制,但只支持单继承,而不支持多重继承,即在C#中一次只允许继承一个类,不能同时继承多个类。

利用类的继承机制,用户可以通过增加、修改或替换类中的方法对这个类进行扩充,以适应不同的应用要求。利用继承,程序开发人员可以在已有类的基础上构造新类,这一性质使得类支持分类的概念。在日常生活中很多东西都很有条理,那是因为它们有着很好的层次分类。如果不用层次分类,则需要对每个对象都定义其所有的性质。使用继承后,每个对象就可以只定义自己的特殊性质,每一层的对象只需定义本身的性质,其他性质可以从上一层继承下来。

继承一个类时,成员的可访问性是一个重要的问题。子类不能访问基类的私有成员,但是可以访问其公共成员。这就是说,只要使用public声明成员,就可以让一个成员被基类和子类访问,同时也可以被外部的代码访问。

为了解决基类成员访问问题,C#还提供了另外一种可访问性——protected,只有派生类才能访问protected成员,基类和外部代码都不能访问protected成员。

除了成员的保护级别外,我们还可以为成员定义其继承行为。基类的成员可以是虚拟的,成员可以由继承它的类重写。子类可以提供成员的其他执行代码。这种执行代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问它们。如果没有提供其他执行方式,外部代码就直接访问基类中成员的执行代码。

虚拟成员不能是私有成员,因为成员不能同时由子类重写也不能访问它。基类还可以定义为抽象类。抽象类不能直接实例化,要使用抽象类就必须继承这个类,然后再实例化。

说明:继承类时,需要使用冒号加类名。

5.7.4 继承的使用
ch0506实例位置:mr\05\sl\Ex05_06

下面通过实例来介绍类的继承性在实际中的应用。

程序开发步骤如下。

(1)启动Visual Studio 2005,新建一个控制台应用程序,命名为Ex05_06。

(2)在自动生成的Program.cs文件中编写如下代码:

//定义基类

public class Class1

{

public void outMethod()

{