码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类和接口精华

时间:2016-05-16 17:34:27      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

抽象类相关

抽象类:又叫抽象基类:在定义的时候使用 abstract 关键字标记的普通类。他可包含一般类所包含的所具有的特性,例如字段,属性,方法,另外还包含一个很特殊的方法,叫抽象方法(没有实现的方法,而派生于该类的类就必须实现该方法),而且不能被实例化,主要用在类的定义和部分实现等方面。

接下来我们先看下抽象类和抽象方法在使用需要注意的地方:

1,抽象类需要用abstract关键字标记

2,抽象方法不能有任何的方法实现(连{}都不能有)

3,抽象成员必须包含在(隶属于)抽象类中。

4,由于抽象成员没有任何实现,所以子类必须将抽象成员重写。

5.抽象类不能实例化,所以抽象类的存在就是为了让子类继承。

6,抽象类中既可以包括抽象成员,也可以包括具有代码实现的成员。,

7,抽象方法不能用static修饰。

看过了抽象类和抽象方法后,我们接着来看下与接口相关的内容

接口相关:

接口:接口是一种特殊的抽象类,用interface关键字来标记接口类型,它可以包含实例/静态方法,任何实现该接口的类就必须按照接口的定义实现这些方法。

下面我们来看下使用接口要注意哪些地方:

1,         接口是一种规范,为了实现多态而存在

2,         接口不能被实例化

3,         接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改(默认为public)

4,         接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)

5,         接口中只能有方法、属性、所引器和事件,不能有“字段”

6,         接口与接口之间可以继承,并且可以多继承

7,         实现接口的子类必须实现该接口的全部成员。

8,         一个类可以同时继承一个类并实现多个接口,如果一个类同时继承了父类A,并且实现了接口IA,那么语法上A必须写在IA的前面。Class  Test:A,IA{},因为类是单继承的。

9,         当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract

 

10,      显示实现接口,只能通过接口变量来调用(因为显示实现接口后成员为private)

看过了抽象类和接口各自的特点后,下面我们就来看下抽象类和接口的区别:

第一:接口定义类的公共行为,抽象类定义类的公共实现

第二:一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

第三:接口中不能有实现,抽象类中既可以有未实现的成员,也可以有实现的成员

第四:接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

第五:好的接口定义应该是具有专一功能性的,而不是多功能的,否则会造成接口污染。如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

看过了抽象类和接口的区别后,我们接着来看下抽象类和接口的应用场合。

  什么时候使用抽象类,什么时候使用接口?

  首先我们强调下:抽象类主要用于关系密切的对象;而且接口适合为不相关的类提供通用功能。

例如:飞机会飞,鸟也会飞,他们都继承了同一个接口”飞”;但是“波音747”属于飞机抽象类,大雁属于鸟抽象类。

或者是如下比喻:

就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

最后用一张简单的表格对两者进行一个对比:

技术分享

 

 

抽象类和接口精华

标签:

原文地址:http://www.cnblogs.com/WuXuanKun/p/5498481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!