对于一些C#的初学者,类似于面向对象中的多态、接口、抽象、不是能很好的理解,本帖只针对一些初学者对这几个概念不是很理解的人看,

牛人请绕道额就不要浪费时间了哈!我一个一个来就举一些简单易懂的例子!

多态

直接上例子:

using System;//包含基本类和基类

using System.Collections.Generic;//定义泛型集合的接口和类

using System.Linq;//支持语言集成查询

using System.Text;//包含用于字符编码等功能的对象

namespace Test

{

class Program

    {

static voidMain(string[] args)

        {

            MyHobby[]hobbies=new MyHobby[4];

            hobbies[0] = new MyHobby();

            hobbies[1] = new Writing();

            hobbies[2] = new Programing();

            hobbies[3] = new Music();

foreach(MyHobby obj in hobbies)

            {

                obj.Interest();

            }

            Console.ReadKey();

        }

    }

/// <summary>

/// 基类 MyHobby

/// </summary>

class MyHobby

    {

public virtual void Interest()

        {

            Console.WriteLine("我的爱好是:");

        }

    }

/// <summary>

/// Writing 继承 MyHobby

/// </summary>

class Writing : MyHobby

    {

public override void Interest()//重载方法Interest()

        {

            Console.WriteLine("写作");

        }

    }

/// <summary>

/// Programing 继承 MyHobby

/// </summary>

class Programing : MyHobby

    {

public override void Interest()//重载方法Interest()

        {

            Console.WriteLine("编程");

        }

    }

/// <summary>

/// Music 继承 MyHobby

/// </summary>

class Music : MyHobby

    {

public override void Interest()//重载方法Interest()

        {

            Console.WriteLine("音乐");

        }

    }

}

运行结果:

总结:思想是,从基类中派生出三个类,在这三个类中重载基类的方法,然后重新调用派生类中的方法。因为每一次重载的功能都不一样,所以就实现了多态!

接口

还是用一个例子来说明:

using System;//包含基本类和基类

using System.Collections.Generic;//定义泛型集合的接口和类

using System.Linq;//支持语言集成查询

using System.Text;//包含用于字符编码等功能的对象

namespace Test

{

class Program

    {

static voidMain(string[] args)

        {

            UseInterface u = new UseInterface();//创建对象,调用方法

            u.SayHello(); 

            Console.ReadKey();

        }

    }

/// <summary>

/// 定义了一个接口FirstInterface

/// </summary>

interface FirstInterface

    {

string Name//定义了一个属性

        {

get;

set;

        }

void SayHello();//关键定义了方法,但是没有方法体!

    }

/// <summary>

/// 既然已经继承了接口,那必须要实现接口中的全部属性,方法等,缺一不可,

/// 例如如果不实现Name属性,程序就会报错!

/// </summary>

class UseInterface : FirstInterface

    {

string name = "我的名字叫龙腾!";

public string Name//重新实现接口中的属性

        {

get { return name; }

set { name = value; }

        }

/// <summary>

/// 实现接口中的方法,这里不需要像多态中用到的 override 改写方法,直接拿过来加上方法体就可!

/// </summary>

public void SayHello()

        {

            Console.WriteLine("大家好!"+this.name);

        }

    }

}

运行结果:

总结:接口的本质就是一些方法!但是要使用这些方法必须要按照一定的规则,否则就不能使用。定义接口,其实质就是定义规则,要使用接口,必须在它的规则下进行!

 

抽象

抽象类和接口有一些相似之处,它们都包含由派生类继承的成员,接口和抽象类都不能直接实例化!(虚的东西你怎么能拿来使用呢对吧?必须要使用第三方的东西来搭桥)

using System;//包含基本类和基类

using System.Collections.Generic;//定义泛型集合的接口和类

using System.Linq;//支持语言集成查询

using System.Text;//包含用于字符编码等功能的对象

namespace Test

{

class Program

    {

static voidMain(string[] args)

        {

            UseMyAbstract u = new UseMyAbstract();//创建对象,调用方法

            u.SayHello();

            Console.ReadKey();

        }

    }

/// <summary>

/// 定义一个抽象类MyAbstract

/// </summary>

abstract class MyAbstract

    {

public abstract void SayHello();//定义一个抽象方法,同样没有方法体!

    }

/// <summary>

///定义一个 UseMyAbstract类 继承 MyAbstract抽象类

/// </summary>

class UseMyAbstract : MyAbstract

    {

public override void SayHello()//改写抽象类MyAbstract中的方法SayHello()

        {

            Console.WriteLine("大家好!我是龙腾!");

        }

    }

}

运行结果:

总结:抽象类可以拥有抽象成员,但是不能直接被实例化,并且没有代码体,它的执行方法是在其派生类中实现的!注意,只要这个类中有一个方法定义为抽象方法,那么这个类必须定义为抽象类!

 

以上只是我个人的一些小的学习感悟!希望能帮到那些需要帮到的人!

作者:李正兴     英文名:black_li
出处:http://www.cnblogs.com/longteng1991/
如果,您喜欢这篇文章的话,您可以分享给您的好友,请点击按钮【推荐】。
如果,您想更快的阅读我的最新文章,您可以关注我,请点击按钮【关注】。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/longteng1991/archive/2012/03/24/2415331.html

面向对象的关键技术(多态、接口、抽象)相关推荐

  1. ❤️什么是Java 面向对象《装、继承、多态、抽象》?建议收藏)❤️

    Java 面向对象(详解) 一.面向对象 (1).面向对象编程(Object-Oriented Programming,OOP) (2).面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装 ...

  2. 第三周 Java语法总结__static关键字__代码块__继承__this和super的区别__重写__final关键字__多态__抽象__接口__形参问题__包__权限修饰符__内部类

    文章目录 6.static关键字 1)静态static关键字的特点: 2)关于static关键字的使用注意事项 3)什么时候将变量定义为成员变量: 7.文档说明书: 8.代码块 9.继承 1)继承的概 ...

  3. java面向对象的理解_面向对象及其核心的概念:抽象、继承与多态、封装

    面向对象的思想是上个世界60年代出现的,一些比较典型的面向对象的编程语言包括JAVA.C++等.很多脚本语言也支持面向对象的语法比如PHP.Python. 什么是面向对象呢?它是一种现实对象的建模方法 ...

  4. 硅谷速递 | 脑机接口重现科幻电影场景?人机交互将成未来科技的关键技术?

    硅谷不仅是世界高科技中心,也是新时代的灵魂,作为全球创新的聚集地,无论是基础的技术创新,还是到下一代的技术应用创新,都有来自一批又一批的"硅谷创新".在硅谷我们不仅能看到专注于技术 ...

  5. 面向对象软件度量技术的分析与综述----整理

    目录 摘要...2 1     引言... 3 2  面向对象软件度量...4 2.1 面向对象的特征...4 2.2 面向对象软件度量方法...4 2.2.1 面向类的度量--CK度量集...5 2 ...

  6. Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

    作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 关注"阿里巴巴云原生"公众号,回复 Go 即可查看清晰知识大图! 导读:从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的 ...

  7. Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

    导读:从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的问题,最后回到 Go 如何解决这些问题,为大家提供 Go 开发的关键技术指南.我们将以系列文章的形式推出<Go 开发的关键技术指 ...

  8. 中间件——构筑复杂分布式应用的关键技术(转)

    中间件 --构筑复杂分布式应用的关键技术 中科院软件所 仲萃豪 九十年代初客户机/服务器计算模式开始成为主流技术,将数据统一存储在数据服务器上,而有关的业务逻辑都在客户端实现,即所谓胖终端的解决方案, ...

  9. 微服务架构系列一:关键技术与原理研究

    导语:人不为己,天诛地灭这个成语中的"为"念作wéi,阳平二声,是"修养,修为"的意思.成语的意思是:如果人不修身,那么就会为天地所不容.本意并不是经常被很多人 ...

  10. MFC六大关键技术之初始化过程

    MFC六大关键技术之初始化过程 我并不认为MFC减轻了程序员们的负担,MFC出现的目的虽然似乎是为了让程序员不用懂得太多就可以进行视窗编程,但本人在MFC里徘徊了很久很久(因为那时没有书本详细介绍MF ...

最新文章

  1. python csv模块心得
  2. golang channel 管道
  3. 互联网研发中负载均衡算法一点探索
  4. 移动端也能兼容的web页面制作1:MDBootstrap演示Demo运行演示
  5. 理解 Delphi 的类(七) - 认识类的多态
  6. 获取socket对应的接收缓冲区中的可读数据量
  7. 淮海工学院期末考试Oracle,【2017年整理】淮海工学院物理化学下册期末试题.doc...
  8. 《人月神话》阅读体会(三)
  9. 临近失业,如何拯救自己?
  10. echarts 获取点击的y轴数值_ECharts关系图
  11. 如何在点击事件中取得复选框选中的单元格值
  12. Oracle 触发器 判断
  13. 求教务排课系统(eclipes和MSQL)!
  14. 计算机类学术论文格式,学术论文的标准格式是什么
  15. 一、什么是统一社会信用代码
  16. 计算机网络的硬件系统包含那些部件,计算机的硬件系统主要包括哪五大部件
  17. 目标检测一阶段和二阶段对比图
  18. 6-32 表头插入法构造链表
  19. 寒江独钓windows 内核安全编程学习笔记
  20. 排列组合解决方格走法_方方格子的便利:拆分数据到多行

热门文章

  1. ASP.NET把图片存入数据库和使用文件流读取显示(转)
  2. iphone core animation教程
  3. Qt5学习笔记之bin文件合成工具四:完善功能打包程序
  4. 适配器模式 - 上厕所案例
  5. Leetcode142. Linked List Cycle II环形链表2
  6. 省选专练HAOI2015树上操作
  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---41
  8. jquery.serialize
  9. 不用js实现鼠标放上去改变文字内容
  10. 最全最新个税计算公式---今天你税了吗?