首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

项目实战中如何使用抽象类和接口

引子: 时常会有这么一个疑惑,抽象类和接口功能好像,真正用起来该如何抉择呢?? 好问题。。 来看看书上怎么说的(C#7.0本质论) 虽然方法可在基类中声明为抽象成员,但是!!...如果都从一个基类派生,会用掉唯一的基类机会,(什么意思呢:也就是C#的单继承特性了),所以,什么都往基类里面加,就会显得特别臃肿,且不通用。 所以,原则就是:大共性你给我放基类,小共性用接口。...所以,这个小共性用接口实现就非常的Nice,为何呢(因为C#是单继承多接口啊!),也就是说,你的狗子不会飞就不要来接触这个接口咯,会飞的动物,除了继承基类,再加个接口就OK了。...奶妈的可以加团体Buff和团体回血 4、格斗家可以加团体Buff 5、剑士可以加自身Buff 这时候呢:很显然就把移动、打怪、聊天设置为基类了;而剩下的则以接口出现,当然至于为什么要用接口,可以看上一篇关于抽象类的文章

85110

C++ OOP面向对象

另外,抽象类可以派生一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则派生类必须覆盖它们。虽然不能定义抽象类的实例,但是可以定义它的指针,这正是用抽象类实现接口的重点所在。...当一个类不准备作为基类使用时,就不要定义虚析构函数了,因为它会增加一个虚函数表,使得对象的体积翻倍,还有可能降低可移值性。...拓展 根据什么考虑是否把一个成员函数声明为虚函数 看成员函数所在的类是否会作为基类 看成员函数在类的继承后有无可能被更改功能,如果希望更改功能的,一般应该将它声明为虚函数。...当一个类不准备作为基类使用时,就不要定义虚析构函数了,因为它会增加一个虚函数表,使得对象的体积翻倍,还有可能降低可移值性。 定义一个函数为虚函数,不代表该函数未被实现,只是为了来实现多态。...抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的。 (接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。

86410
您找到你想要的搜索结果了吗?
是的
没有找到

区分接口和抽象类

抽象类 1 如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。 2 抽象方法必须存在于抽象类中。 3 抽象类中可以有一般的变量和一般的方法。...抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充 1 接口是核心,定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。...如果我们的项目中有Women和Man,都继承Person,而且Women和Man绝大多数方法都相同,只有一个方法DoSomethingInWC()不同(例子比较粗俗,各位见谅),那么当然定义一个AbstractPerson...总而言之,接口与抽象类的区别主要在于使用的动机,而不在于本身。而一个东西该定义成抽象类还是接口,要根据具体环境的上下文决定。...再者,我认为接口和抽象类的另一个区别在于,抽象类和它的子类之间应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。 (转脚本之家)

44130

Java集合框架知识整理

、Serializable接口 Set接口继承Collection接口 AbstractSet抽象类继承了AbstractCollection抽象类,实现了Set接口 HashSet类继承了AbstractSet...、Consumer接口 SortedSet接口继承Set接口,依赖了Comparator接口 NavigableSet接口继承SortedSet接口(Java6新增) Map接口依赖了Set、Collection...ConcurrentSkipListSet:底层使用跳跃列表来实现,适用于高并发的场景,内部使用了ConcurrentNavigableMap,同TreeSet功能相似,线程安全。...ConcurrentSkipListMap:底层使用跳跃列表来实现,适用于高并发的场景,内部使用了ConcurrentNavigableMap,同TreeMap功能相似,是一个并发的、可排序的Map,线程安全...将会批量删除符合filter条件的所有元素,该方法需要一个Predicate对象作为作为参数,Predicate也是函数式接口,因此可使用Lambda表达式作为参数。

57720

java综合面试练习题

修饰类 该类即为抽象类,不能实例化 修饰方法 该方法即为抽象方法 ,不能有方法体存在 17.接口是否能继承接口? 抽象类是否能实现(implements)接口? 抽象类是否能继承非抽象的类?...接口可以基础接口,还允许继承多接口 - 抽象类可以实现接口,可以不完全实现接口中的抽象方法 - 抽象类可以继承普通类 18、抽象类和接口有哪些共同点和区别?...都不能实例化,可以被继承 - 抽象类有构造器,但是接口没有 - 抽象类只能单继承,接口可以多接口继承 19.遍历一个List有哪些不同的方式?...22.List,Set, Map是否继承Collection接口?...(Iterator)和增强型for循环进行取元素 迭代器:使用hasNext作为where条件,使用next()取元素 增强型for循环:根据格式取出值 Map Map是双列集合,所以存在取键和值 获取键

55550

Kotlin中级(7)- - - Kotlin类之抽象类、重载和重写.md

也就是说,抽象类是在告诉要继承的类:我有一些方法和属性没有具体实现,我命令你去把它们弄完整 abstract 其中值得注意的是:抽象可以分为抽象类、抽象函数、抽象属性。...而一个抽象类和普通类的区别在于抽象类除了可以有自己的属性、构造函数、方法等组成部分,还包含了抽象函数以及抽象属性。...抽象类的规则 在Kotlin中的抽象类在顶层定义的时候只能使用public可见性修饰符修饰 抽象类中可以定义内部抽象类 只能继承一个抽象类 若要实现抽象类的实例化,需要依靠子类采用向上转型的方式处理...抽象类可以继承一个继承类,即抽象类可以作为类。...重写是写在两个类里的,它们是继承的关系 重载是在一个类中的,相同的方法名、不同的参数 重载和重写都是针对方法的,且方法名相同

85220

PHP中的 抽象类(abstract class)和 接口(interface)

但将常量变量放在 interface 中违背了作为接口的作用而存在的宗旨,也混淆了 interface 与类的不同价值。...4 .一个类可以在声明中使用 implements 关键字来实现某个接口。这么做之后,实现接口的具体过程和继承一个仅包含抽象方法的抽象类是一样的。一个类可以同时继承一个父类和实现任意多个接口。...PHP 只支持继承一个父类,因此 extends 关键字后只能跟一个类名。 5 .接口不可以实现另一个接口,但可以继承多个 三、 抽象类和接口的异同 1....,也可以留给子类来实现,但此类必须也声明为抽象类。...3. interface 的应用场合 (1)      类与类之间需要特定的接口进行协调,而不在乎如何实现。

68830

【趣学程序】java面向对象(三)

抽象类不能创建实例对象(不能new) 需要子类重写所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类 abstract class Person{} class Student extends...因为抽象类不可以实例化 }} 抽象类的体现-模板设计模式 模板设计模式 抽象类是多个具体子类抽象出来的父类,具有高层次的抽象性;以该抽象类作为子类的模板可以避免子类设计的随意性; 抽象类作为多个子类的通用模板...: 都位于继承的顶端,用于被其他实现或继承; 都不能实例化; 都包含抽象方法,子类都必须覆写这些抽象方法; 不同点: 抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性,可以有普通方法...; 匿名内部类 适合只使用一次的类 不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建匿名内部类的对象。...格式: new 父类构造器([实参列表]) 或 接口(){//匿名内部类的类体部分} 例如我们将上面代码中IA,IB两个接口通过匿名内部类的方式来创建对象: IA innerIa = new IA()

52740

.NET面试题解析(04)-类型、方法与继承

看下面的代码,有一个基类A,B1和B2都继承A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么?...不同的类型指针在虚拟方法表中有不同的附加信息作为标志来区别访问的地址区域,称为offset。不同类型的指针只能在其特定地址区域内进行执行。...抽象类不能实例化,必须通过继承由派生类实现抽象方法,因此对抽象类不能使用new关键字,也不能被密封。...基本特点: 抽象类使用Abstract声明,抽象方法也是用Abstract标示; 抽象类不能被实例化; 抽象方法必须定义在抽象类中; 抽象类可以继承一个抽象类抽象类不能被密封(不能使用sealed)...在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么?

52030

java基础语法-抽象类(一)

定义和特性抽象类是一种抽象的概念,它不能被直接实例化。抽象类通常用来定义抽象方法,这些抽象方法没有方法体,也就是说它们没有具体的实现。抽象方法的定义方式是在方法声明中使用关键字“abstract”。...但是,不能使用“final”修饰符来定义抽象类,因为“final”表示不可修改,而抽象类是不完整的,需要在子类中实现。与接口不同的是,抽象类可以有构造函数,并且可以有成员变量。...另外,子类继承抽象类时,必须实现抽象方法,或者将自己也定义为抽象类使用抽象类的好处是,它可以提供类的继承机制,允许程序员定义出一个抽象类作为其他类的基类。...我们可以创建一个圆形类Circle和一个矩形类Rectangle,它们都继承Shape类,并实现了area()方法。...Circle和Rectangle类都继承Shape类,因此它们都必须实现area()方法。我们可以创建对象的实例,并调用area()方法来计算面积。

14320

.NET面试题解析(04)-类型、方法与继承

看下面的代码,有一个基类A,B1和B2都继承A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么?...不同的类型指针在虚拟方法表中有不同的附加信息作为标志来区别访问的地址区域,称为offset。不同类型的指针只能在其特定地址区域内进行执行。...抽象类不能实例化,必须通过继承由派生类实现抽象方法,因此对抽象类不能使用new关键字,也不能被密封。...基本特点: 抽象类使用Abstract声明,抽象方法也是用Abstract标示; 抽象类不能被实例化; 抽象方法必须定义在抽象类中; 抽象类可以继承一个抽象类抽象类不能被密封(不能使用sealed)...在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么?

51920

ASP.NET MVC的Model元数据提供机制的实现

中] 一、 ModelMetadataProvider 在ASP.NET MVC的Model元数据相关的应用编程接口中,用于创建Model元数据的ModelMetadataProvider接继承抽象类...GetMetadataForType(Func modelAccessor, Type modelType); 6: } 注:在本文中提及的ModelMetadataProvider在大部分情况泛指直接或者间接继承抽象类...不过DataAnnotationsModelMetadataProvider并没有直接继承ModelMetadataProvider,而是继承抽象类AssociatedMetadataProvider...继承AssociatedMetadataProvider的DataAnnotationsModelMetadataProvider实现了抽象方法,它根据传入的特性列表以及其他相关的信息(用于创建Model...如果项目里面确实需要使用到类似的用法,可以考虑自己实现缓存。

61560

面向对象基础知识学习总结笔记2019-8-26

对象继承的关系是is-a;继承定义了类如何相互关联、共享特性。...抽象类作为一个抽象的概念,它提供了一个继承的触发点, 当设计一个新的抽象类时,一定是用来继承的。 所有在一个以继承关系行成的等级结构里面。...树叶节点应当为一个具体类,而树枝节点均应当是抽象类. 具体类不作为继承的。...如果行为跨越不同类的对象,可以使用接口;对于一些相似的类对象,用继承抽象类。 实现接口和继承抽象类并不冲突。让超人继承人类,再实现飞行接口。...抽象类是从子类中发现了公共的东西,泛化出父类, 然后子类继承父类,而接口是根本不知子类存在, 方法如何实现还不确认,预先定义。

22610

Dart学习笔记(四)

抽象类主要用于定义标准,不可使用抽象类直接生成实例,只有继承抽象类的子类才可以实例化对象。...使用abstract关键字来定义抽象类: //使用abstract关键字来定义抽象类 abstract class Animal{ } 如果我们要在抽象类中定义一个方法,要求该抽象类的子类必须实现该方法...dart中的抽象类,既可以作为一个父类去生成对应的子类,也可以作为其他类的接口封装。...在Dart中,我们使用implements关键字来实现使用抽象类来封装的接口,并且一个类可以实现多个接口,如下: //封装接口的抽象类 abstract class Animal{ String name...需要注意的是,作为mixins的类只能继承Object,而不能继承其他的类。也就是说,上例中的 A,B,C 都必须是继承Object,否则就会报错。

82730

C#面试题

5.如何避免隐身装箱? 编码中,多使用泛型、显示装箱。 6.箱子的基本结构?...所有类型都继承System.Object吗? 基本上是的,所有值类型和引用类型都继承System.Object,接口是一个特殊的类型,不继承System.Object。 2....1、继承:接口支持多继承抽象类不能实现多继承。 2、表达的概念:接口用于规范,更强调契约,抽象类用于共性,强调父子。...在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么?...一般用哪一个作为使用更好? Mutex是一个基于内核模式的互斥锁,支持锁的递归调用,而Lock是一个混合锁,一般建议使用Lock更好,因为lock的性能更好。

75120

Dart学习笔记

变量定义 Dart中,不像其他语言存在基本类型与类类型,Dart中所有类型(包括int等)都是继承Object的类型 字符串字符为UTF16编码,小数都为double类型,函数类型为Function,...抽象类中可以定义没有方法体的抽象方法 抽象类不能被实例化 abstract class Study { void study(); } 继承与实现 抽象类与类都可以被作为接口进行实现,当一个类被用来实现...,成员仅结构起作用,而方法实现都无关系(因为实现类不能复用代码,必须重新实现该成员结构) 一个类 / 抽象类可以实现多个抽象类,但是只能继承一个类 / 抽象类 Dart中通过extends关键字进行继承...,Dart允许通过mixin实现伪多继承 继承构造 子类构造函数默认继承父类构造函数(隐式调用) 通过在子类构造函数形参列表使用:可以修改要使用的父类构造函数,比如 class A {...Dart提出mixin多继承,通过with关键字关联多个类 / 抽象类 进行mixin继承 mixin继承解决多继承同名同类型成员冲突的规则是,如果当前类中,包含该同名同类型成员,则使用当前类成员,否则使用

1K30

C++多态原理揭秘

(2)三同(函数名,返回值,函数参数列表)(斜变和析构函数除外) (3)是virtual修饰的虚函数. 实现效果: 不同对象使用同一个函数名,可以实现不同的行为,也就是多态....纯虚函数的作用是规范继承类的接口,强制派生类提供相应的实现,从而增强程序的可扩展性。同时,纯虚函数也可以作为基类中的一个默认实现,提供一些默认的行为。 抽象类的作用如下: 提供一种适合多态的机制。...抽象类中通常包含一些实现细节,这些细节对于使用派生类的代码来说并不需要知道。通过将这些细节封装在抽象类中,可以使代码更加清晰和简洁。...接口继承与实现继承 实现继承: 派生类继承了基类普通函数,可以使用函数,继承的是函数的实现。也就是实现继承....三、解密多态原理 还记得在刚刚接触类和对象的时候,我们需要了解对象的大小如何计算. 对于函数,所有的类都可能需要使用,这可以将函数存放在公共区域,也就是不在类中,不占用类的空间.

12820
领券