接口和抽象类

接口和抽象类是面向对象中最精妙的部分。软件设计工业的两块基石。

solid设计原则,算法,设计模式

solid不是一个设计原则,而是5个面向对象设计原则的首字母的缩写,以下是这五个原则:

  • Single Responsibility Principle//单一职能原则(SRP)
  • Open Closed Priinciple//开放关闭原则(OCP)
  • Liskov Substitution Principle/替换原则(LSP)
  • Interface Segregation Principle //接口隔离原则(ISP)
  • Dependency Inversion Principle //依赖反转原则(DIP)

这五个原则孕育出了几十种的设计模式,设计模式是这五个原则高阶用法。

抽象类:函数成员没有被完全实现的一种类(他的方法体都不全),abstract类的成员不能是private,因为这样子类无法访问它。

抽象类不能实例化,因为实例化之后的成员函数没有执行的逻辑,用处所在:1.作为基类,让派生类实现抽象的方法 (纯虚方法)2.可引用抽象类变量来引用基类的实例,多态的效果


(Open Closed Principle)开闭原则:把一些稳定不变的成员封装,将一些不稳定的封装为抽象类型,让子类去实现


接口包含了纯抽象类的含义:内部方法已经是abstract和public的

  • 具体类---->抽象类------->接口:越来越抽象,内部实现的东西越来越少
  • 抽象类是未完全实现的类(可以有字段和非public成员)他们代表了“具体逻辑”)
  • 抽象类为复用而生,(对于可以复用的,就去实现它,对于不能复用的声明为抽象方法,让继承的子类去实现)具有解耦功能。
  • 封装确定的,开放不确定的,推迟到子类中去实现
  • 接口是完全未实现的逻辑的“类”(“纯虚类”;只有函数成员;成员全部public);
  • 接口为解耦功能而生,“高内聚,低耦合‘,方便单元测试
  • 接口是一个”协约“,早已为工业生产所熟知(有分工必有协作,有协作必有协约)
  • 他们都不能实例化,只能用来声明变量,引用具体类的实例。
class Program
    {
        static void Main(string[] args)
        {
            Vehicle v=new RaceCar();
            v.Run();
           
        }
    }
    interface  IVehicle {
       void Stop();
        void Fill();
         void Run();
    }
    abstract class Vehicle : IVehicle
    {                  
     public  void Stop()//可以复用的
        {
            Console.WriteLine("Stopped");
        }
     public  void Fill() {
         Console.WriteLine("Pay and fill...");
     }
     abstract public void Run();//没法复用的,使用抽象类声明为纯虚方法,让子类去实现
    }
   class RaceCar:Vehicle {
       public override void Run()
       {
           Console.WriteLine("RaceCar is running");
       }  
   }
    class Car:Vehicle
    {
        public override void Run()
        {
            Console.WriteLine("Car is running..");
        }       
    }
    class  Truck:Vehicle
    {
        public override void Run()
        {
            Console.WriteLine("Truck is running..");
        }
    }
原文地址:https://www.cnblogs.com/1521681359qqcom/p/11241755.html