您的位置:首页 > 其它

深入继承 - 抽象类和接口

2008-05-05 14:10 363 查看
因为这个视频还没有做完,我想把抽象类和接口全部做完,估计是两级或者三级,因为里面包含对以前学过的知识的一个复习和其他一些小细节,所以不做完就很难得到一个完整的思路,这两点确实是很绕的,如果没有一个完整的思路和一个比较有说服力的演示,确实很难说清楚!

说实在这两个知识点我确实做得很头疼,演示简单了怎么也说不出为什么需要用这个东西,复杂了又很难讲清楚!我实在很郁闷,目前只是把基本的东西做出来了,完整的演示还没有做出来,我想实在不行就搬一套设计模式来讲出为什么需要用吧.

下面是目前已经做了的,我先发布出来,免得跟我一样的急性子门受不了漫长的等待,哈哈,安慰下

上一节呢狠狠的废话了一大盘(我好久没有废话得这样过瘾了,哈哈).

从这节我们就深入继承,不在是28级讲的那么简单的手啊眼啊男人女人什么的. 如果没记错的话,我以前应该说过类同时只能继承一个类. 那这话是否是真的呢,我有骗你没有呢??? 哈哈,想知道吗? 继续看后面的教程吧! 提个醒,我这人凡事爱走偏锋,连瞒天过海的事都会做,所以也许我确实骗了你........

首先我们给出抽象类和接口的概念,大家可以把视频暂停下来记录一下.

抽象类:又叫抽象基类(不是鸡肋):他在定义的时候使用 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: 表示当前方法已经改写了基类的同名同参数的方法、属性、索引器或事件的抽象实现或虚实现.

==============================下面是相关的代码=================================

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

public abstract class vehicle

public class car : vehicle

public class Truck : vehicle

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using I_B;

public partial class demo : System.Web.UI.Page

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

namespace I_B

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

interface I_2_A //声明第一个接口

interface I_2_B //声明第二个接口

//什么都没有声明。但是他实际上是继承了前面两个接口的属性和方法。

public class I_2_L : I_2_C //声明一个类,他继承了I_2_C这个接口

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

public interface I_3_A

public interface I_3_B

public class I_3_L

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

public interface I_4_A

public interface I_4_B : I_4_A

public interface I_4_C : I_4_A

public class I_4_L
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: