在C#基础知识之类和结构体中我详细记录了类、类成员、重载、重写、继承等知识总结。这里就记录一下对面向对象和面向对象三大特性的广义理解。

一、理解面向对象

  类是面向对象编程的基本单元,面向对象思想其实就是教给我们如何合理的运用类的规则去编写代码。

二、理解面向对象的三大特性

  1、封装

    封装就是通过给类及类中的成员变量、属性和方法设置不同的访问修饰符(public、protected、internal、protected internal、private)来控制它们的作用范围,以达到封装的目的。

  2、继承

    什么是继承?顾名思义,就是子类根据C#的规则 继承父类的方法或者数据成员的一种方式。

    注意事项:

      (1)C# 不支持多重继承。但是,您可以使用接口来实现多重继承      

        

   //基类
   class Shape
   {
      public void setWidth(int w)
      {
         width = w;
      }
      public void setHeight(int h)
      {
         height = h;
      }
      protected int width;
      protected int height;
   }

   // 接口 PaintCost
   public interface PaintCost
   {
      int getCost(int area);
   }
   // 派生类
   class Rectangle : Shape, PaintCost
   {
      public int getArea()
      {
         return (width * height);
      }
      public int getCost(int area)
      {
         ;
      }
   }
   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle Rect = new Rectangle();
         int area;
         Rect.setWidth();
         Rect.setHeight();
         area = Rect.getArea();
         // 打印对象的面积
         Console.WriteLine("总面积: {0}",  Rect.getArea());
         Console.WriteLine("油漆总成本: ${0}" , Rect.getCost(area));
         Console.ReadKey();
      }
   }

      (2)一个对象用父类声明,使用子类实例化的三种情况

        1>一般情况下:你用正常的办法访问不到子类自己的成员,只能访问到从父类继承来的成员。

        

        2>在子类中用 override 重写父类中用 virtual 申明的虚方法的情况下,执行时调用的是子类中重写的方法;

        

        执行结果

        3>如果子类中用 new 覆盖父类中用 virtual 申明的虚方法情况下,执行时调用的是父类中的虚方法;

        

        运行结果

        深究其原因,为何两者不同,是因为原理不同: override是重写,即将基类的方法在派生类里直接抹去重新写,故而调用的方法就是子类方法;而new只是将基类的方法在派生类里隐藏起来,故而调用的仍旧是基类方法。

  3、多态

  (1)概念:如何理解多态?多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。

  (2)多态性的分类:多态性分为静态多态性和动态多态性。在静态多态性中,函数的响应是在编译时发生的,比如函数重载、运算符重载;在动态多态性中,函数的响应是在运行时发生的,动态多态性是通过 抽象类 和 虚方法 实现的。其实总的来说多态有两种形式:重载、重写

最新文章

  1. JFinalConfig配置
  2. 《UML大战需求分析》阅读笔记03
  3. 在Ubuntu中用root帐号登录
  4. 如何编写好的jQuery代码
  5. Python文件IO
  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(43)-工作流设计-字段分类设计
  7. android style 退出动画 解决退出动画无效问题
  8. 关于在xp(sp3 专业版)下安装sql2005开发版图解
  9. heritrix 3.2.0 下载
  10. 【转载】将绿色版Tomcat服务添加到系统服务并设为开机运行
  11. java系列--重载和覆盖小结
  12. Java 学习笔记 Junit4单元测试使用
  13. Linux产生序列数字
  14. 从ibd文件获取表空间id
  15. MongoDB索引,性能分析
  16. VB6 获取和设置默认打印机
  17. SGE:qsub/qstat/qdel/qhost 任务投递和监控
  18. Linux删除文件名中包含“-”的文件
  19. SDK Build Tools revision (19.0.3) is too low for project Minimum required is 19.1.0
  20. bzoj 2342: [Shoi2011]双倍回文 -- manacher

热门文章

  1. spring cloud + .net core实现微服务架构
  2. JS判断客户端是否是iOS或者Android手机移动端(转载)
  3. 初探WebAssembly
  4. 浅析Javascript单例模式
  5. LeetCode专题-Python实现之第9题:Palindrome Number
  6. LeetCode专题-Python实现之第1题:Two Sum
  7. 如何设计一个 RPC 系统
  8. springmvc 项目完整示例08 前台页面以及知识点总结
  9. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(5)- 软件优化
  10. #7 Python代码调试