zoukankan      html  css  js  c++  java
  • 《大话设计模式》学习心得系列(二)

    面向对象基础(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


     

  • 相关阅读:
    Pair Project: Elevator Scheduler
    Project: Individual Project
    【homework week5】初步了解敏捷开发——自由与约束的哲学统一
    【homework #1】第一次作业被虐感受
    To be transfered
    谈敏捷,谈开发 --《Agile Software Development》读后感
    结对编程---附加题作业(作业请参考相应博客)
    结对编程-电梯调度算法的实现 (附加题部分请参考对应博客)
    必应缤纷桌面的必应助手-软件分析和用户市场需求之-----二.体验部分 Ryan Mao (毛宇11061171) (完整版本请参考团队博客)
    对学长所谓“改变世界的游戏”《shield star》的运行感想-毛宇部分(完整版本请参考团队博客)
  • 原文地址:https://www.cnblogs.com/spilledlight/p/4963067.html
Copyright © 2011-2022 走看看