接口 抽象类

软件是工业的一个分支,接口和抽象类都是软件工程的产物。

定义

具体类->抽象类->接口:越来越抽象,内部实现的东西越来越少。

为做基类而生的抽象类


函数成员没有完全被实现的类成为抽象类,关键字abstracted修饰。
不允许实例化抽象类,作用1是做基类(继承),2是用基类类型的变量引用子类的实例(派生)。抽象方法被子类所实现,相似 overwrite重写virtual函数,也被成为纯虚方法(c++)。

开放关闭原则

大意是如果不是为了修bug和修改功能,不要去修改类的函数成员的代码,封装稳定的成员函数,不确定的成员封装成抽象成员,用于子类的继承。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)
        {
            Vehicle v=new Car();
            v.Run();//现在我们用Vehicle类型的变量去引用car类型的实例,是无法获取到方法的。

        }
    }

    class Vehicle
    {
        public void Stop()
        {
            Console.WriteLine("Stopping");
        }


    }

    class Car:Vehicle
    {
        public void Run()
        {
            Console.WriteLine("car is running");
        }
    }
    
    class Truck:Vehicle
    {
        public void Run()
        {
            Console.WriteLine("Truck is running");
        }
    }
}
using System;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)
        {
            Vehicle v=new Car();
            v.Run();

        }
    }

    class Vehicle
    {
        public void Stop()
        {
            Console.WriteLine("Stopping");
        }

        public virtual void Run()
        {
            
        }

    }

    class Car:Vehicle
    {
        public override void Run()
        {
            Console.WriteLine("car is running");
        }
    }
    
    class Truck:Vehicle
    {
        public override void Run()
        {
            Console.WriteLine("Truck is running");
        }
    }
}

所以把Vehicle这个类就可以变成抽象类,子类的同名方法要加override

    abstract  class Vehicle
    {
        public void Stop()
        {
            Console.WriteLine("Stopping");
        }

        public abstract  void Run();

    }

为解耦而生的接口--完全未实现逻辑的类

接口一定是纯抽象类(成员函数没有具体内容)和公开的,所以abstract和public在类名和成员函数前省略, 类名前只加一个interface,类里void+成员函数名。

抽象类和接口的区别

抽象类可以有字段和非public成员,他们代表了具体逻辑;
而接口只有成员函数, 且全为public,public为隐式。
他们都不能实例化,只能用来声明变量,引用具体类的实例。

补充

solid设计模式

单一功能原则
开闭原则
里氏替换原则
接口隔离原则
依赖反转原则

设计模式的学习需要熟练使用solid原则,设计模式则是由这些基础原则演化而来。

posted @ 2020-03-10 15:48  翱翔的猴子  阅读(176)  评论(0编辑  收藏  举报