zoukankan      html  css  js  c++  java
  • 接口和抽象类

    1. 什么是接口?   接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现部分。C#中接口可以包含属性、方法、索引器和事件声明。当某个类实现(implement)某个接口时候,这个类必须实现接口中的所有方法和其他成员。接口不能实例化。
    2. 什么是抽象类?  抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由overriding方法来实现。

      接口和抽象类的区别:

    1. 抽象类应主要用于关系密切的对象,是对具有相同特点的一类(族)事物的抽象,更加注重与这些事物的共同属性等。比如:猫(Cat)、狗(Dog)、鸟(Bird)等几类,就可以抽象为Animal抽象类,他们具有共同的特征比如嘴巴、眼睛、耳朵、脚等属性,也都有Eat吃东西的功能。Cat、Dog、Pig继承自Animal抽象类,也就具有这些属性。 因此抽象类强调的是一种IS-A的关系;为此我们可以有以下实现。
      View Code
       1 abstract class Animal
      2 {
      3 public abstract string Mouth { get; set; }
      4 public abstract string Eye { get; set; }
      5 public abstract string Ear { get; set; }
      6 public abstract void EatFoot();
      7 }
      8
      9 class Cat : Animal
      10 {
      11 public override string Mouth
      12 {
      13 get;
      14 set;
      15 }
      16
      17 public override string Eye
      18 {
      19 get;
      20 set;
      21 }
      22
      23 public override string Ear
      24 {
      25 get;
      26 set;
      27 }
      28
      29 public override void EatFoot()
      30 {
      31 Console.WriteLine("Eat Fish");
      32 }
      33 }
      34
      35 class Dog : Animal
      36 {
      37 public override string Mouth
      38 {
      39 get;
      40 set;
      41 }
      42
      43 public override string Eye
      44 {
      45 get;
      46 set;
      47 }
      48
      49 public override string Ear
      50 {
      51 get;
      52 set;
      53 }
      54
      55 public override void EatFoot()
      56 {
      57 Console.WriteLine("Eat Bone");
      58 }
      59 }
      60
      61 class Bird : Animal
      62 {
      63 public override string Mouth
      64 {
      65 get;
      66 set;
      67 }
      68
      69 public override string Eye
      70 {
      71 get;
      72 set;
      73 }
      74
      75 public override string Ear
      76 {
      77 get;
      78 set;
      79 }
      80
      81 public override void EatFoot()
      82 {
      83 Console.WriteLine("Eat worm");
      84 }
      85 }
    2. 接口主要是定义一种规范或者行为,为不相关的对象提供统一标准的功能。比如Bird鸟类会Fly,而飞机也会Fly,他们之前并不属于同一种抽象类型,但是都有Fly的功能。因此,我们可以定义一个IFly接口具有Fly的功能;然后飞机和Bird都实现这个接口。因此,接口是对功能、行为的抽象,更强调一种“Can do”的关系。
      View Code
       1  interface IFly
      2 {
      3 void Fly();
      4 }
      5
      6 class Plane : IFly
      7 {
      8 #region IFly 成员
      9
      10 public void Fly()
      11 {
      12 Console.WriteLine("Plane: I can fly with my iron wings");
      13 }
      14
      15 #endregion
      16 }
      17
      18 class Bird : Animal,IFly
      19 {
      20 public override string Mouth
      21 {
      22 get;
      23 set;
      24 }
      25
      26 public override string Eye
      27 {
      28 get;
      29 set;
      30 }
      31
      32 public override string Ear
      33 {
      34 get;
      35 set;
      36 }
      37
      38 public override void EatFoot()
      39 {
      40 Console.WriteLine("Eat worm");
      41 }
      42
      43 #region IFly 成员
      44
      45 public void Fly()
      46 {
      47 Console.WriteLine("Bird:I can fly with my two wings");
      48 }
      49
      50 #endregion
      51 }
      在设计接口时候,尽量将接口设计成功能单一的功能块,要避免引起接口污染。“接口不变”是应该考虑的重要因素。在由接口增加扩展功能时候,应该增加新的接口,而不是更改现有接口。 
    如果您觉得本文对您有所帮助,请点一下"推荐"按钮,您的"推荐"将是我最大的写作动力!
    作者:rpoplar
    出处:http://www.cnblogs.com/rpoplar/
    本文版权归作者【rpoplar】和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究其法律责任的权利。
  • 相关阅读:
    关于Ext tabpanel 自定义active 样式/iconCls
    关于vue使用 npm run dev报错原因
    vue学习笔记(1)
    BeanCreationNotAllowedException: Error creating bean with name 'cxf' 的原因和解决方案
    js做四则运算时,精度丢失问题及解决方法
    java word/doc/docx文档转PDF 加水印
    HTML学习笔记
    (小白疑问求大神解答)可否理解为数据库就是excel表格的封装?
    excel表格加减法
    基础算法思想
  • 原文地址:https://www.cnblogs.com/rpoplar/p/2434464.html
Copyright © 2011-2022 走看看