但实现接口的类中的接口方法却默认为非虚的

时间:2021-11-21 03:12:54

一、抽象类:
抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包孕抽象要领,这是普通类所不能的。抽象要领只能声明于抽象类中,且不包罗任何实现,派生类必需笼罩它们。此外,抽象类可以派生自一个抽象类,可以笼罩基类的抽象要领也可以不笼罩,如果不笼罩,则其派生类必需笼罩它们。
二、接口:
接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1、不能实例化;
2、包罗未实现的要领声明;
3、派生类必需实现未实现的要领,抽象类是抽象要领,接口则是所有成员(不只是要领包孕其他成员);
此外,接口有如下特性:
接口除了可以包罗要领之外,还可以包罗属性、索引器、事件,而且这些成员都被界说为公有的。除此之外,不能包罗任何其他的成员,例如:常量、域、结构函数、析构函数、静态成员。一个类可以直接担任多个接口,但只能直接担任一个类(包孕抽象类)。
三、抽象类和接口的区别:
1.类是对东西的抽象,可以把抽象类理解为把类看成东西,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自界说接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是界说在一系列紧密相关的类间,而接口大大都是关系疏松但都实现某一成果的类中.
2.接口根基上不具备担任的任何具体特点,它仅仅答理了能够挪用的要领;
3.一个类一次可以实现若干个接口,但是只能扩展一个父类
4.接口可以用于撑持回调,而担任并不具备这个特点.
5.抽象类不能被密封。
6.抽象类实现的具体要领默认为虚的,但实现接口的类中的接口要领却默认为非虚的,固然您也可以声明为虚的.
7.(接口)与非抽象类类似,抽象类也必需为在该类的基类列表中列出的接口的所有成员供给它本身的实现。但是,允许抽象类将接口要领映射到抽象要领上。
8.抽象类实现了oop中的一个原则,把可变的与不成变的疏散。抽象类和接口就是界说为不成变的,而把可变的座位子类去实现。
9.好的接口界说应该是具有专一成果性的,而不是多成果的,否则造成接口污染。如果一个类只是实现了这个接口的中一个成果,而不得不去实现接口中的其他要领,就叫接口污染。
10.尽量制止使用担任来实现组建成果,而是使用黑箱复用,即东西组合。因为担任的条理增多,造成最直接的后果就是当你挪用这个类群中某一类,,就必需把他们全部加载到栈中!后果可想而知.(结合仓库道理理解)。同时,有心的伴侣可以留意到微软在构建一个类时,很多时候用到了东西组合的要领。好比

但实现接口的类中的接口方法却默认为非虚的

asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的东西。使用Page类的这个东西来挪用此外的类的要领和属性,这个长短常根基的一个设计原则。
11.如果抽象类实现接口,则可以把接口中要领映射到抽象类中作为抽象要领而不必实现,而在抽象类的子类中实现接口中要领.
四、抽象类和接口的使用:
1. 如果估量要创建组件的多个版本,则创建抽象类。抽象类供给简单的要领来控制组件版本。
2.如果创建的成果将在大范畴的全异东西间使用,则使用接口。如果要设计小而简练的成果块,则使用接口。
3.如果要设计大的成果单元,则使用抽象类.如果要在组件的所有实现间供给通用的已实现成果,则使用抽象类。
4.抽象类主要用于关系密切的东西;而接口适合为不相关的类供给通用成果。
以下是我在网上看到的几个形象比方,真的非常不错,呵呵:
1.飞机会飞,鸟会飞,他们都担任了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单担任);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)界说了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发生发火声音吧(接口污染))。
今天偶然碰到这方面的学习,感受前辈总结的不错,本身也动手试了几把,觉得很是精辟,如果掉慎对原作者造成版权侵权还望指出。