简介
编辑在编程语言中,抽象类型是指记名类型系统中不能直接实例化的类型;非抽象的类型--可以实例化的类型--被称为具体类型。抽象类型的每个实例都是某个具体子类型的实例。抽象类型也被称为存在性类型。
一个抽象类型可能不提供任何实现,或者不完整的实现。在一些语言中,没有实现的抽象类型(而不是不完整的实现)被称为协议、接口、签名或类类型。在基于类的面向对象编程中,抽象类型被实现为抽象类(也被称为抽象基类),而具体类型被实现为具体类。
在泛型编程中,类似的概念是一个概念,它同样规定了语法和语义,但不需要子类型关系:两个不相关的类型可以满足同一个概念。通常,抽象类型会有一个或多个单独提供的实现,例如,以可以实例化的具体子类型的形式。
在面向对象的编程中,一个抽象类可能包括其子类所共享的抽象方法或抽象属性。
其他用于实现抽象类型的语言特性的名称包括特征、混合、风味、角色或类型类。
符号化抽象类型
编辑抽象类可以通过几种方式被创建、符号化或模拟。通过在类定义中使用明确的关键字abstract,如Java、D或C#。通过在类定义中包括一个或多个抽象方法(在C++中称为纯虚函数),该类被声明为接受其协议的一部分,但没有提供实现。
通过从抽象类型继承,但没有覆盖完成类定义所需的所有缺失特征。换句话说,一个没有从它的父类实现所有抽象方法的子类本身就成了抽象的。
在许多动态类型的语言中,比如Smalltalk,任何向此发送特定方法但不实现该方法的类都可以被视为抽象的。
(然而,在许多这样的语言中,比如Objective-C,直到使用该类时才发现错误,信息返回的结果是异常错误信息,比如Doesnotrecognizeselector:xxxas-[NSObjectdoesNotRecognizeSelector:(SEL)selector]在检测到未实现的方法时被调用)。示例(Java)//默认情况下,所有类中的所有方法都是具体的,除非使用了抽象关键字。abstractclassDemo{//一个抽象类可以包括抽象方法,这些方法没有实现。abstractpublicintsum(intx,inty);
使用抽象类型
编辑抽象类型是静态类型的OOP语言的一个重要特征。许多动态类型的语言没有相应的特征(尽管鸭子类型的使用使得抽象类型没有必要);但是在一些现代动态类型的语言中发现了traits。一些作者认为,类应该是叶子类(没有子类型),否则就是抽象的。
抽象类型很有用,因为它们可以用来定义和执行一个协议;一组所有实现该协议的对象都必须支持的操作。
抽象类型也是模板方法模式的一个重要组成部分。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/170666/