《大话设计模式》学习心得系列(二)

面向对象基础(2)

本博文意在巩固基础知识,高手请绕过。

面向对象的三大特征:封装、继承、多态

什么是封装?

   每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。这样方法和属性包含在类中,通过类的实例来实现。

   类将数据和操作数据的方法结合成一个单位。在设计类时,不希望直接存取类中的数据,而是希望通过方法来存取数据。如此就可以达到封装数据的目的,方便以后维护、升级,也可以在操作数据时多一层判断,提高安全性。

    使用封装可以将数据隐藏起来,形成一个封闭空间。在编写程序时,对类的成员使用不同的访问修饰符,从而定义它们的访问级别。

  封装的优点:

    1.减少耦合;

    2.类内部的实现可以自由的修改;

    3.类具有清晰的对外接口。

什么是继承?

  对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为“B是A”,则表明B可以继承A。     

  C#中提供了类的继承机制,只支持单继承,不能同时继承多个类。被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。       

  一个类从另一个类派生出来时,派生类继承了基类的特性。除了构造函数和析构函数外,派生类隐式地继承了直接基类的所有成员。子类可以从基类中继承的成员有方法、域、属性、事件、索引指示器。构造函数虽然不能被继承的,但是子类依然可以使用base关键字进行调用。    

  子类除了从基类继承的属性和功能外,还可以有属于自己的特性。子类还可以通过方法重写的方式来实现父类的功能。

 1 class Apple    //基类Apple
 2 {
 3   public void  Applenum()
 4   {
 5     Console.WriteLine("苹果!");
 6   }
 7 }
 8 class BigApple:Apple   //BigApple类继承于Apple
 9 {
10   public new  void  Applenum()  //使用new重写方法
11   {
12     Console.WriteLine("大苹果!");
13   }
14 }
15  static void Main(string[] args)
16  {    
17      Apple apple=new Apple();  //创建Apple实例
18      apple.Applenum();
19      BigApple bigApple=new BigApple();   //创建BigApple实例
20      bigApple.Applenum();  
21      Console.ReadKey();
22   }
View Code

什么是多态?
  多态就是不同的类的实例,执行同一操作,最后产生不同的执行结果。就像两个苹果,虽然都属于苹果类,但有大小和形状不同,大小和形状都属于苹果的属性,这样就产生了多态性。
  多态性分为编译时多态和运行时多态。
  编译时的多态性是通过重载来实现的。方法重载是指一个方法名称具有多个数量或类型的参数的函数,传递的参数也不同,实现不同的功能。
  运行时的多态性是指程序运行过程中,根据实际情况来实现不同操作。在C#中,运行时的多态性通过虚成员实现。
  积累中需要重写的函数使用关键字virtual定义,该关键字放在返回类型前面。而派生类如果要重写虚函数,则要使用关键字override,该关键字放在返回类型前面。

  例如:
    通过重载实现编译时多态

 1 class Apple
 2 {
 3   private int applenum;
 4   private string sapple;
 5   public void Applenum()
 6   {
 7   Console.WriteLine("一共有几个苹果呀?");
 8   }
 9   public void  Applenum(int applenum)
10   {
11     Console.WriteLine("一共有{0}个苹果!",applenum);
12   }
13   public void Applenum(int applenum,string sapple)
14   {
15     Console.WriteLine("一共有{0}个苹果!{1}",applenum,sapple);
16   }
17 }
18 
19  static void Main(string[] args)
20  {
21      int applenum = 5;
22      string sapple = "你是我的小苹果!";
23      Apple apple=new Apple();
24      apple.Applenum(applenum, sapple);
25      apple.Applenum(applenum);
26      apple.Applenum();
27      Console.ReadKey();
28   }
View Code

  例如:
    通过重写实现编译时多态

 1 class Apple    
 2 {
 3   public virtual void  Applenum()   //创建虚方法
 4   {
 5     Console.WriteLine("苹果!");
 6   }
 7 }
 8 class BigApple:Apple   //BigApple类继承于Apple
 9 {
10   public override  void  Applenum()  //使用override重写方法
11   {
12     Console.WriteLine("大苹果!");
13   }
14 }
15  static void Main(string[] args)
16  {    
17      Apple apple=new Apple();  //创建Apple实例
18      apple.Applenum();
19      BigApple bigApple=new BigApple();   //创建BigApple实例
20      bigApple.Applenum();  
21      Console.ReadKey();
22   }
View Code


 

posted @ 2015-11-13 18:47  追风的小蜗牛  阅读(486)  评论(0编辑  收藏  举报