---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

双楹

我的程序员之路从黑马开始

导航

黑马程序员----面向对象设计的封装、继承、多态特性

 

1.面向对象设计

  面向对象程序设计是在面向过程程序设计的基础上发展而来的,他将数据和对数据的操作看作一个不可分割的整体,力求将现实问题简单化,因为这样不仅符合人们的思维习惯,同时也提高软件的开发效率,并方便后期的维护。

1.1面向对象编程(Object-Oriented Programming)简称OOP技术,是开发应用程序的一种新方法、新思想。使用OOP技术,会使用很多代码模块,每个模块都只能提供特定的功能,它们是彼此独立的,这样提高了代码的重用率。

1.2对象和程序的关系

对象=算法+数据结构

程序=对象+对象+对象+……

从上面的等式可以看出,程序就是许多对象在计算中相继表现自己,而对象则是一个个的程序实体。

1.3面向对象的三个基本特性:

1)封装性:类是属性和方法的集合,为了实现某项功能而定义类,但开发人员并不需要了解类体内每句代码的具体含义,只需通过对象来调用类内某个属性或方法即可实现某项功能。

2)继承性:通过继承可以创建子类和父类之间的层次关系,子类可以从父类中继承属性和方法。

3) 多态性:是指不同的类进行同一操作可以有不同行为。

2.创建类与类的成员

2.1创建类

类修饰符 class 类名

{

public int number;

  public string color;//定义属性

      //定义方法

}

常用的类修饰符

1)         public:不限制对该类的访问。

2)         protected:只能从其所在类和所在类的子类进行访问。

3)         internal:只有其所在类才能访问。

4)         private:只有.NET中的应用程序或库才能访问。

5)         abstract:抽象类,不允许建立类的实例。

6)         sealed:密封类,不允许被继承。

2.2构造函数与析构函数

1)         构造函数:是在创建给定类的对象时执行的类方法。构造函数具有与类相同的名称,通常用于初始化新对象的数据成员。

例如:

public class Program

{

  public int x;

public int y;

public int z;

//构造函数

public Program()

{

      z=x+y;

}

static void Main(string[] args)

{

Program pro=new Program();

Console.WriteLine(“结果为:”+pro.z);

Console.ReadKey();

}

2)         析构函数

析构函数是以类名加“~”来命名的。当某个类的实例被认为是不再有效,并符合析构条件时,.NET Framework类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收。

2.3实例化对象

Program pro=new Program();

通过使用new关键字,创建类的对象。

2.4定义成员字段、方法、属性

public class MyClass

{

      public int myField;//字段声明

      public void Method()

  {

  //在方法中编写代码

  }

  //属性定义

  public int MyField

  {

        get{

             return myField;

         }

        set{

             myField=value;

        }

  }

}

 3封装、继承、多态

3.1封装:面向对象编程中,大多数都是一类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时不希望直接存取类中的数据,而是希望通过方法来存取数据,这样就可以达到封装数据的目的,方便以后的维护升级,也可以在操作数据时多一层判断。此外,封装还可以解决数据存取的权限问题,可以使用封装数据隐藏起来,形成一个封闭的空间。

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

      利用类的继承机制,用户可以通过增加、修改或替换类中的方法对这个类进行扩充,以适应不同的应用要求。利用继承,程序开发人员可以在已有类的基础上构造新类。继承一个类时,类成员的访问性是一个重要问题。子类不能访问基类的私有成员,但是可以访问其公共成员。只要是public声明类成员,就可以让一个类成员被基类成员和子类同时访问,同时可以被外部的代码访问。C#还提供了protected访问:只有子类才能访问protected成员。另外,基类的成员可以是虚拟的,该虚拟的成员可以被派生类重写。基类也可以定义为抽象类。抽象类不能直接实例化,要使用抽象类就必须继承这个类,然后再实例化。

      3.21继承的实现

      语法格式如下:

class DerivedClass :BaseClass//继承类,子类和基类之间用冒号

{

//子类新加成员

}

3.22单继承

单继承一般用于在类之间的继承,实现单继承时,使用“子类:基类”格式。另外在子类中重写基类的虚方法时,可以使用base关键字调用基类中的虚方法。如果要使用多重继承,需要使用接口,接口支持多重继承,实现多重继承时,继承的接口中间用逗号隔开。

例如:class Program:MyClass,IPeople//用逗号隔开,多重继承

           {

                 //新增成员、实现接口中方法等

           }

3.3多态

3.31多态的定义:

  可以概括为:“一个接口,多种方法”,它是在程序运行过程中才调用的方法,多态性是面向对象编程的核心概念。多态使得子类的实例可以直接赋予基类的变量,然后就可以直接通过这个变量调用子类的方法。

那么多态性到底有什么用呢?封装可以隐藏细节,使得代码模块化;继承可以扩展已经存在的代码模块,它们的目的都是为了代码重用;而多态则是为了实现另一个目的---接口重用。因为接口是最浪费时间资源,实质上设计一个接口要比设计一堆类要显得更有效率。

3.32多态的实现

1)类的多态性是通过在子类中重写基类的虚方法或成员函数来实现的。

2)当子类从基类继承时,它会获得基类的所有方法、字段、属性和事件。要更改基类的数据和行为有两种选择:

  a、可以使用新的派生成员代替基成员,需使用new关键字。如果要在子类中创建与基类相同的方法、字段或属性,则使用new关键字创建该方法、字段或属性的新定义。new关键字放置在要替换的类成员的返回类型之前。

  b、重写虚拟的基成员。子类可以重写基类中用virtual修饰的类方法。在子类中要使用override关键字,放置在返回类型之前。

  注意:virtual修饰符不能与private、static、abstract或者override修饰符同时使用。

     override修饰符不能与new、static或者virtual修饰符同时使用,并且重写方法只能用于重写基类中的虚方法。

     在C#中,继承、虚方法和重写方法组合在一起才能实现多态性。

 

 

 

posted on 2012-04-25 15:08  双楹  阅读(178)  评论(0编辑  收藏  举报