A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓江红 中级黑马   /  2014-4-1 10:43  /  1204 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对抽象类这一块不是很清晰,谁能清楚点帮忙解释下呢?!

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

1 个回复

倒序浏览
这是我之前做的笔记:如下
抽象类:又叫抽象基类(不是鸡肋):他在定义的时候使用 abstract 关键字标记的一般类.他可包含一般类所包含的所有特性,例如,字段,属性,方法,另外他还包含一个很特殊的方法,叫抽象方法(这些方法基本上是没有执行代码的函数标题,而派生于该类的的类就必须提供执行的代码).最可气的是,他不能被实例化,他主要的用在类的定义和部分实现这方面,所以他需要在扩充类中完整的扩充并实现功能.

抽象方法:  当类中的方法在声明的时候加上 abstract 关键字的时候,他就被我们称为抽象方法(洋名字叫  abstract method , 其实偷偷告诉你哈,我最近学了好多英文单词,虽然还是常常读错,但是已经有很大进步了,估计要不了多久就可以在那里大声朗读李白曾经写过的一首英文诗歌了),但是有个很重要的提醒,只有在抽象类和接口中才可以使用抽象方法.

例如 : 下面这个

public abstract class Thc123_Com
{
       public abstract void GoTo();
}

public class Thc123_Net : Thc123_Com
{
      public override  void GoTo()
      {
             //实现上面抽象方法
       }
}



=========================================================================================

大家知道我们的组装计算机,即便是那些品牌机他实际上也是来自很多不同的厂商然后组装起来的, 那么这写硬件之间就有一个必然的联系,那就是他们之间一定要有规范的接口,可是就拿我们的主板来说吧,这个CPU,他既可以是赛阳的,也可以是奔腾的,更可以是速龙,闪龙,当然我跟特别非常十分希望再加上一个咱们中国的CPU品牌,这些CPU肯定采用了一些不同的运算方式啊,所以说我们这个接口就还要学会一点(我们常常劝老人的话,他只要在孝顺你,你就别关他那么多的家务事),说得太好了,我们的接口还要做的事就是不管对方是怎么实现的,反正你插到这里面((*&^#@*&^%$%^$$#$)你就要实现具体的功能,至于你怎么实现就不管那么多了.


接口:他呢其实也是一种特殊的抽象类,用 interface 关键字标记,他的定义没有 class 关键字,他可以包含 方法和属性和事件,但是方法也只能是虚拟方法,任何派生于该接口的类就必须提供执行的代码.任何接口成员前面都不能加修饰符.

接口可用的修饰符有 new  ,  public  ,protected  , internal   ,  private  ,但是同一声明中修饰符只能有一个,new关键字只能出现在镶套接口中,表示复写继承来的同名成员.


接口和类一样,可以被继承和发展,但不同的是,类继承不仅说明继承也会实现继承,但是接口继承只是说明继承,通俗的说,派生类可以继承基类的方法实现,而派生接口只是继承父接口的方法说明,却没有继承父接口的实现.

语法:
interface Ibook
{
      string  GetBookName();
}

接口相关知识:

1.声明在接口中的方法,不可以包含方法的内容区块,简单来说就是不能有大括号存在,例如下面
public interface Ibook  
{
      string  GetBookName()
       { }
}

2. 实现接口的类就要这样写

public class Employee:Ibook , IUser
{

}

3 .  实现接口需要注意的一些东东

(1).实现一个接口就必须完成接口里的所有方法.(就好象谁家有几个女儿,有漂亮的有对不起观众的,我要去娶那个漂亮的,然后人家开口了,小伙子,你要娶我女儿可以,但是你必须把几个女儿全部娶了,否则我会让你后悔一辈子. )

(2).在实现的类中又有几点必须遵循的(我倒,都三重编号了,看来我写的书后期编辑是件很棘手的事)
   ·存取权限必须相同  ;
   ·返回值类型必须相同
   ·方法的名称必须相同
   ·参数必须相同

(3) . 接口内的方法不能用 virtual  关键字申明,更不要设置存取权限.

下面我们继续来看下个例题

另外还有一种呢就是以明确的方式实现接口

简单来说就是方法前面必须加上接口的名称.这个解释起来没有看起来明确,来吧,看这里(怎么听这话有点怪怪的,难道是我思想不健康,按理说我算是生在阳光下,长在花丛中(不过18岁以后我就基本上是成长在一群 花虫 中了),没理由思想会这么XX啊.)



下面针对抽象类和接口做一个详细的对比

抽象类( abstract method  )        接口 (  interface  )
可以包含实现区块        不能包含实现区块
可以包含抽象方法        不能包含抽象方法
可以包含非public成员        不可以包含非public成员
能继承其他的类,包含非抽象类        能继承其他接口
可以控制版本        无法控制版本
不能被实例化        不能被实例化

virtual:  这个关键字表示当前方法、属性、索引器或事件的抽象实现或虚实现可被任何派生自这个类的扩充类进行复写.
override:  表示当前方法已经改写了基类的同名同参数的方法、属性、索引器或事件的抽象实现或虚实现.

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马