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

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

    定义

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

    为做基类而生的抽象类


    函数成员没有完全被实现的类成为抽象类,关键字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原则,设计模式则是由这些基础原则演化而来。

  • 相关阅读:
    Ansys Maxwell2——二维电磁场理论和有限元基础
    Ansys Maxwell在工程电磁场中的应用1——二维分析技术
    第四章 栈
    第三章 链表
    第二章 队列
    第三章 操作系统用户界面总结
    第一章 逻辑结构与物理结构
    Linux-Mint的一些配置经验
    docker安装zookeeper的使用说明
    SpringCloud初体验-使用Eureka进行服务注册和发现
  • 原文地址:https://www.cnblogs.com/lpxspring/p/12436205.html
Copyright © 2011-2022 走看看