当前位置:文档之家› 面向对象--接口与抽象类、对象和接口(通俗讲解)

面向对象--接口与抽象类、对象和接口(通俗讲解)

面向对象--接口与抽象类、对象和接口(通俗讲解)
面向对象--接口与抽象类、对象和接口(通俗讲解)

面向对象--接口与抽象类的恩恩怨怨

接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。就我自己的一点心得,发表一下拙见。

面向对象的一些回顾:

面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。这其实也是解耦和的体现。

那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。

说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。是人们要把对现实世界中的一系列方法论应用到程序设计当中来。从对象这一概念的引入我们就可以揣摩这一点。人类社会中有很多对象的概念,人、车、物体。不幸的是用程序来实现这些对象比在概念上定义对象要难很多。

(如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧)

MS给出开发者的建议是,用抽象类来实现接口。子类再继承基类。

实例说明:

为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。我们要造车。这个车有个基本的属性就是能移动、还必须有轮子。那我们就设计一个接口

1public interface ICar

2 {

3 string Wheel

4 {

5 get;

6 set;

7 }

8 void Move();

9 }

10

接下来的事情,就是实现了。造什么车都行,继承一下就行。随着科技的发展,我们的车想要飞了。此时当然不能修改这个接口,因为要遵循开闭原则。为什么要遵循?我们可以想一下,人坐上飞机能飞上天。但是也没见谁认为人有会飞这个特性的。那也好办,不许修改,那我再加一个接口。

1interface IFlyable

2 {

3 void Fly();

4 }

5

好,我们的飞行汽车最后应该是这样的。

1class FlyCar : ICar,IAerocraft

2 {

3 private string wheel = string.Empty;

4

5 public void Fly()

6 {

7 Console.WriteLine("{0}车飞起来了",this.wheel);

8 }

9 public string Engine

10 {

11 get

12 {

13 return wheel;

14 }

15 set

16 {

17 wheel = value;

18 }

19 }

20

21 public void Move()

22 {

23 Console.WriteLine("{0}轮车在走",this.wheel);

24 }

25 }

26

看起来很不错,车能飞能走了。那它现在他的祖宗到底车还是飞行器呢?我们自己在心里辩论一下吧。估计不是很容易辩清楚。

我们前面说过,面向对象的思想来源于现实生活。如果把这组例子引入到现实中来,造会飞的汽车。肯定是要在原有的汽车上面下功夫。比如你装上喷气动力装置,或者装上翅膀。

这只属于扩展功能,而不能说是继承基类。但上面的例子可以明显的看出,我们的飞行汽车已经成了杂交品种。分不出到底是车还是飞行器了。这里就可以知道为什么C#和JA V A都不支持多重继承基类了。避免杂交,减少耦合。

上面把车定义成接口并不完美,我们知道,一辆正常的车肯定能移动。这是天生的本质,不需要任何实现。但是上面还需要子类来实现这个功能。从这一点其实可以衍生出很多问题来。我们这里不做过多讨论。

重新设计这个系统。我们可以把移动,飞行都看成是一种行为。我们的车本身拥有Move 这个行为,是构成车基类的基本要素。

1interface IMoveable

2 {

3 void Move();

4 }

5 interface IFlyable

6 {

7 void Fly();

8 }

9public abstract class Car : IMoveable

10 {

11 public abstract string Wheel

12 {

13 get;

14 set;

15 }

16 public virtual void Move()

17 {

18 Console.WriteLine("车移动了");

19 }

20 }

21 public sealed class FlyCar : Car,IFlyable

22 {

23 private string wheel = string.Empty;

24 public override string Wheel

25 {

26 get

27 {

28 return wheel;

29 }

30 set

31 {

32 wheel = value;

33 }

34 }

35

36 public void Fly()

37 {

38 base.Move();

39 Console.WriteLine("汽车起飞成功!");

40 }

41 }

42 //在这里应用任何模式都很简单了

43 static void Main(string[] args)

44 {

45 FlyCar c = new FlyCar();

46 ((IFlyable)c).Fly();

47 ((Car)c).Move();

48 }

49

总结归纳:

其实类似的例子在我们的.NET Library里随处可见,例如Control类是继承于Component 和其他大量的接口的,而他们的基类却是MarshalByRefObject。因为他们归功到底又属于引用对象。

从上面的描述中,我们可以得出结论:

接口:

是某类行为或功能的抽象。是一种开关或者是契约。所以从字面上来理解就非常清楚了,西方神话中有很多和魔鬼定下契约来使自己的力量得到提升的故事。你必须定下这个契约才能得到你想要的力量。

抽象类:

对具体对象的最高抽象,这个对象拥有自己的最基本特征。

所以,从整体上来讲,抽象类和接口本质上都是是系统的最高抽象。从实际上来讲,二者抽象的对象不一样,就这一点导致了他们二者的应用的截然不同。

3句话:

1、接口抽象行为,抽象类抽象对象

2、用抽象类来实现接口。子类再继承基类

3、抽象类和接口本质上都是是系统的最高抽象

对象和接口(通俗讲解)

最近,还是看到很多人在问对象和接口的问题。

我原本以为,这已经不是个问题了,但是现在看来,它还困扰着很多程序员。

其实这个问题很简单,举例说明吧:

你是一个对象,继承自你的父母,你的gf也是一个对象,继承自她的父母,只有你和你的gf发生关系(比如打kiss)的时候,才会出现接口。这是接口的本质,接口就是一个对象要和另外一个对象发生关系时的协议。

很多误导人的书,把接口说成是为了解决多重继承问题,其实是作者不懂,而且还在误导别人。从下面的例子可以分析一下

type

TSun = class(TParent, ISomeInterface)

....

end;

持以上观点的人,只是从现象上看到,诶,这不是c++的多重继承吗?

错了,

上面的写法,真实的含义,应该是这样的,TSun,继承于TParent,说明TSun有TParent 大多数特性,还可能有自己的一些新特性,或者TParent没有完成的虚特性,TSun也完成了。这里主要解决代码复用问题。

但是,从语义上,却不能说TSun继承自ISomeInterface,ISomeInterface的出现说明这样一个问题:TSun,希望它的调用者按ISomeInterface的标准调用自己。

一切,都很清楚了,接口,和硬件的接口,协议,是一回事,跟面向对象没有任何关系,接口的出现,基于这样一个事实,对象间会发生关系,而接口具体明确的规定了发生关系的协议。就像一台电脑,本身是一个对象,但是至少又有电源,开关两个接口,人机交互又需要键盘和显示器两个接口。

所以,上面的例子是说,我遵守ISomeInterface接口,只要按ISomeInterface接口调用我,不会有任何问题。

从面向对象的角度看,public部分的东西,就是接口,只不过,interface的出现,更加强调了这个事实。它是大规模合作开发时的协议,是开发团队成员间必须遵守的规范。

php程序员简历模板

php程序员简历模板 php程序员简历模板一 年龄:21学历:大专 专业技能 核心语言: 熟练应用PHP+MySQL技术,能在WAMP环境下熟练编程。 理解对于Web网站开发的安全性要求,例如防SQL注射、令牌加密等技术。 理解Web开发流程,具有OO思想,能独立开发网站。 框架技术: 熟练使用smarty模板引擎技术,TP框架开发网站。 对三层结构、MVC的开发(设计模式)有较好的理解。 数据库: 熟练应用MySQL、SQLServer2005数据库,以及使用SQL语言。 前台展现: 熟识HTML、XHTML网页技术,能熟练应用DIV+CSS样式布局设计出符合Web2.0的页面,熟练应用JavaScript、Ajax技术实现对于客户端的脚本验证,能够熟练使用Jquery类库实现对页面即点即改等功能。 开发工具: 能够使用ZendStudio-5.5.0等PHP开发工具。 掌握PhotpShop、Dreamweaver网页开发工具的使用。

熟悉php168,Ecshop二次开发工具的使用。 项目经验 人事管理系统(应用程序) 软件环境:WAMP 编程工具:EditPlus 责任描述:组内讨论需求分析以及数据建模,功能独立开发完成 项目描述:无论对于大型公司,中小型公司,都避免不了对员工的管理,对于每个公司的管理者,在任何方面都需要一个既提供标 准有提供管理的系统;对于公司的员工也希望能够了解自己的表现及 在公司的职位、职责; 让公司对员工的管理更方便,通过本系统能有效地管理工资发放、员工的考勤动态 还可实现员工的自我查看和管理;以提高公司的执行效率和经济 效益。 项目感想:该项目主要应用了smarty+Ajax等技术由于php是一种弱的语言,并不能实现面向对象的多态(重载),所以只是用到了 面向对象的编程思想。在开发的过程中也使我更加熟悉基于 Smarty+CMS的开发模式。 天元茶叶网(168二次开发) 软件环境:WAMP 开发工具:ZendStudio-5.5.0 项目描述:本次开发运用的是php168v6版本的二次开发! 这个版本主要是标签的使用,它实现了内容与设计的结合!方便 快捷 本次开发的是茶叶网,实现了php168v6版本的功能

PHP程序设计习题答案

第1章PHP开篇 习题 一、填空题 1.Apache的httpd服务程序使用的是【80 】端口。 2.在进行软件开发时有两种基本架构,B/S架构和【C/S 】架构。 3.URL的英文全称是【Uniform Resource Locator】,中文名称为【统一资源定位符 】。 4.【HTTP 】协议是计算机硬件与软件之间数据交换的格式。 5.【HTTP】表示传输数据所使用的协议,【WWW】表示要请求的服务器主机名。 二、判断题 1.使用PHP写好的程序,在Linux和Windows平台上都可以运行。(√) 2.PHP可以支持MySQL数据库,但不支持其它的数据库。(×) 3.PHP有很多流行的MVC框架,这些框架可以使PHP的开发更加快捷。(√) 4.Zend Studio是PHP中常用的IDE(集成开发环境)。(√) 5.进行PHP程序开发时,可以借助软件和工具来提高效率。(√) 三、选择题 1.下列选项中,不是URL地址中所包含的信息是( D )。 A. 主机名 B. 端口号 C. 网络协议 D. 软件版本 2.PHP是一种( A)的编程语言。 A. 解释型 B. 编译型 C. 两者都是 D. 两者都不是 3.PHP是个网站开发中非常流行的脚本语言,其流行的原因不包含( C )。 A. 易学 B. 易用 C. 易调试 D. 易扩展 4.PHP与Linux、Apache和MySQL一起共同组成了一个强大的Web应用程序平台,下 列选项中为该平台简称的是(B )。 A. WAMP B. LAMP C. LNMP D. WNMP 5.在下列选项中,哪些不属于PHP的突出特点( B )。 A开源免费 B. 开发成本高 C. 跨平台性 D. 支持多种数据库 四、简答题 1.请简要说明PHP的突出特点是什么? 1.开源免费2跨平台性3.面向对象 4.支持多种数据库 5.快捷性.

接口和抽象类的区别

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 例如: public abstract class AbsTest { public virtual void Test() { Debug.WriteLine( "Test" ); } public abstract void NewTest(); } public interface ITest {

void Test(); void NewTest(); } 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。 知道了两者的区别,再来说说,接口相对于抽象类的优势。 好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。 好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。 好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。 好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

接口和抽象类习题-答案

(一)选择题 1.以下哪个接口的定义是正确的? A.interface B{ void print() { } ; } B.abstract interface B { void print() ; } C.abstract interface B extends A1,A2 { abstract void print(){ }; } D.interface B { void print();} 2.定义一个接口时,下列哪个关键字用不到? A.public B.extends C.interface D.class 3.定义一个接口时,要使用如下哪个关键字? A.abstract B.final C.interface D.class 4.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。 A.private B.protected C.private或者protected D.public 5.下列类头定义中,错误的是? A.public x extends y B.public class x extends y C.class x extends y implements y1 D.class x 6.下列类定义中,不正确的是? A.class x B.class x extends y C.class x implements y1,y2 D.public class x extends X1,X2 7.Java中能实现多重继承功能的方式是? A.接口 B.同步 C.抽象类 D.父类 8.下列叙述正确的是? A.Java中允许多重继承 B.Java一个类只能实现一个接口 C.Java中只能单重继承 D.Java中一个类可以继承多个抽象类 (二)简答题

第7讲:mysqli扩展库(面向对象、面向过程)

mysqli 1.mysqli (mysql improve) mysql扩展库的增强版 2.mysql 与mysqli 的比较 ①mysqli 的稳定性和安全性,效率有所提高 ②mysqli 支持面向对象编程,同时支持为了照应老程序员,也提供了面向过程的编程风格。 3.mysqli 类:代表php和mysql数据库之间的一个连接。 4.mysqli操作mysql数据库的步骤 ①创建mysqli 对象//验证 ②操作数据库(发送sql) ③处理结果 ④关闭资源 5.实例:mysqli扩展库面向对象的方式操作数据库 connect_error){ //1111验证 die("失败".$mysqli->connect_error); } $sql="select * from words"; //2222222 发送指令 $res=$mysqli->query($sql); //33333333接受=发送的指令的返回结果while($row=$res->fetch_row()){ //3333对结果进行处理foreach($row as $key=>$val){ echo "--$val"; } echo "
"; } $res->free(); //44444 关闭资源 $mysqli->close(); ?> 注: 1.面向对象中,程序中的$res用于代表sql语句的执行结果 ①如果执行的事dml语句,则返回bool; ②如果执行的事dql语句,则返回查询结果mysqli_result 结果集对象。

C#抽象类和接口的区别

C#抽象类和接口的区别

c#接口和抽象类的区别大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 二、接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性: 接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 三、抽象类和接口的区别: 1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 3.一个类一次可以实现若干个接口,但是只能扩展一个父类 4.接口可以用于支持回调,而继承并不具备这个特点. 5.抽象类不能被密封。 6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。 8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。 9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。 10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!

抽象类与接口的区别

抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 一、理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。 二、从语法定义层面看abstract class和interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。使用abstract class的方式定义Demo抽象类的方式如下: java 代码 abstract class Demo { abstract void method1(); abstract void method2(); …

PHP面向对象和PHP面向过程的优缺点评比

P H P面向对象和P H P面 向过程的优缺点评比 Revised by Petrel at 2021

PHP面向对象和PHP面向过程的优缺点评比 面向对象与面向过程在许多编程语言中只能使用二者之一来进行编程,但是PHP语言与其他编程语言有不同之处,那就是我们可以自由的选择或者将PHP面向对象和PHP面向过程二者混用。目前绝大多数PHP程序员使用面向过程的方式,因为解析Web页面本身就非常“过程化”(从一个标签到另一个标签)。在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方式。 如果你是刚接触PHP,用PHP面向过程的风格来书写代码很可能是你唯一的选择。但是如果你经常上PHP论坛和新闻组的话,你应该会看到有关“对象”的文章。你也可能看到过如何书写面向对象的PHP代码的教程。或者你也可能下载过一些现成的类库,并尝试着去实例化其中的对象和使用类方法--尽管你可能没有真正理解这些类为什么可以工作,或者为什么需要使用PHP面向对象的方法来实现功能。 应该使用“面向对象”的风格还是“面向过程”的风格?双方各有支持者。像“对象是低效的”或“对象非常棒”这样的议论也时有耳闻。本文不尝试轻易判定两种方法的哪种具有绝对的优势,而是要找出每种方法的优缺点。 以下是PHP面向过程风格的代码示例: 以下是PHP面向对象风格的代码示例: myPrint(); > 如果你想了解一些“面向对象”的基本知识,请使用Google搜索,网络上有非常多精彩的文章。 谁像这样写代码? 为了理解为什么这个论题成为论坛上口水战的导火线,我们看一些每个阵营的比较极端的例子。我们看看“过程狂热”和“对象狂热”。看看他们的观点听起来是不是有点熟悉。 过程狂热 过程狂热曾在上课时被计算机教师批评,因为这种方法没有使用更加抽象的实现方式。而支持PHP面向过程者的观点“它可以工作!”并不能提高其编程水平和

(完整版)毕设外文翻译-详细解析Java中抽象类和接口的区别

Parsing Java Abstraction of the Difference Between Classes and Interfaces In Java language, abstract scale-up and with support class abstraction definition of two mechanisms. Because of these two kinds of mechanism of existence, just gives Java powerful object-oriented skills. Abstract scale-up and with between classes abstraction definition for support has great similarities, even interchangeable, so many developers into line non-abstract class definition for abstract scale-up and it is becoming more casual with choice. In fact, both between still has the very big difference, for their choice even reflected in problem domain essence of understanding, to design the intentions of the understanding correctly and reasonable. This paper will for the difference analysis, trying to give a developer with a choice between them are based. Understand class abstraction Abstract class and interface in Java language is used for abstract classes (in this article non-abstract class not from abstract scale-up translation, it represents an abstract body, and abstract scale-up for Java language used to define class abstraction in one way, please readers distinguish) defined, then what are the abstract classes, use abstract classes for us any good? In object-oriented concept, we know all objects is through class to describe, but in turn not such. Not all classes are used to describe object, if a class does not contain enough information to portray a concrete object, this class is abstract classes. Abstract classes are often used to characterization of problem field in our analysis, design that the abstract concepts, is to the series will look different, but essentially the same exact conception of abstraction. For example: if we carry out a graphical editing software development, will find problem domain exists round, triangle so some specific concept, they are different, but they all belong to shape such a concept, shape this concept in problem domain is not exist, it is an abstract concept. Precisely because the abstract concepts in problem field no corresponding specific concept, so to characterization abstract concepts non-abstract class cannot be instantiated. In an object-oriented field, mainly used for class abstraction types hidden. We can

实验七 抽象类、包与接口

实验七抽象类、接口与包 一、实验目的 1、熟练掌握抽象类abstract的概念。 2、熟练掌握接口interface的概念。 3、熟练包package的概念以及编译运行的方法。 二、实验内容与要求 1.编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特点。 2、重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。提示:从键盘上输入双精度数的一种方法(程序片段) …… public static void main(String args[]) throws IOException { BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in)); String x; x=keyin.readLine(); double a=Double.parseDouble(x); …… 3.练习https://www.doczj.com/doc/553347242.html,ng.Class类的使用,通过一个对象返回一个Class对象,如何获取一个类的名称,如何使用class生成一个类的对象。获取类的描述信息。 4.从命令行输入一个正整数,用递归的方法求出每位数字上的累加和 5、编写一个应用程序,实现以下功能: ①声明一个接口(Calculability),接口中包含一个方法area()。 ②声明一个三角形类继承该接口,类名为Triangle,类中包含两个变量、一个带参数年的构造方法和一个计算三角形面积的方法: 三角形的底边长w 三角形的高h 构造方法Triangle(double width,double height)。 计算三角形面积的方法area(),该方法覆盖接口(Calculability)的同名方法,计算三角形的面积(w*h/2)。 ③声明一个锥体类(Taper),包含一个接口对象bottom(锥体的底)和一个变量(锥体的高)height,一个带参数的构造方法,一个换底方法getbottom(),一个锥体体积的计算方法volume()。 ④声明一个主类Exp6_1,在主方法中声明接口和锥体类的对象,输出锥体的底面积和锥体的体积(bottom*height/3)。

PHP面向对象知识总结

面向对象知识: 1 你对面向对象的认识 2 什么是类?什么是对象?类和对象之间的关系? 类:类是具有相同属性和行为的一组对象的集合 对象:对象是实际存在的该类事物的每个个体,因而也称实例 类和对象的关系:类是对象的抽象,对象是类的实例 3 面向对象的3大特征 继承,封装,多态 4 怎么创建一个类的对象? 使用new 这个关键字创建对象 5 什么是构造方法(函数)?怎么定义?有什么样的特点? 构造方法(在OO中,函数被称为方法) 1 特殊的名称:__construct 2 在实例化对象时,自动被调用 3 在内存中划分了对应的内存空间区域 4 构造方法可以像普通方法一样,接收参数;这里的参数通常是用来初始化类中的属性的 5 构造方法不能重复定义,每个类当中有且只能有一个;如果不写相当于有一个默认的不带参数且没有任何执行语句的空函数 6 什么是析构方法(函数)?怎么定义?有什么特点? 析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。 __destruct() 析构函数,是在垃圾对象被回收时执行。 析构函数也可以被显式调用,但不要这样去做。 析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。 析构函数不能带有参数。 7 什么是封装?有什么作用?列举一些封装的实例 封装就是把对象的属性和行为结合成一个独立的相同单位,并尽可能隐藏对象的内部细节。 优点:信息隐蔽,封装即隐藏(目的:不能让别人随意修改信息)。 怎么实现封装? (1.访问修饰符(public、protected、private) (2.类 (3.函数方法 (4.文件 (5.文件夹 8 访问修饰符有哪3个?分别有什么作用、特点 public 公共的谁都可以用,也可以修改 protected 受保护的只有自己和后代可以使用和修改 private 私有的只有自己可以使用和修改 9 什么是继承?关键字是什么?有什么作用? 继承:扩展父类的内容,注意只能继承public和protected修饰的内容,而private 修饰的则不能继承 关键字:extends

Java面试问题:抽象类与接口的区别.

Java面试问题:抽象类与接口的区别2019-01-01 很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题, 。本文我们将仔细讨论这些话题。 在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。 抽象类 抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet 为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { // abstract method abstract void service(ServletRequest req, ServletResponse res); void init() { // Its implementation } // other method related to Servlet } 当HttpServlet类继承GenericServlet时,它提供了service方法的实现: public class HttpServlet extends GenericServlet { void service(ServletRequest req, ServletResponse res) { // implementation } protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // Implementation } protected void doPost(HttpServletRequest req, HttpServletResponse resp) { // Implementation } // some other methods related to HttpServlet } 接口 接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable 接口为例: public interface Externalizable extends Serializable { void writeExternal(ObjectOutput out) throws

抽象类和接口的相同和异同点

抽象类和接口的相同和异同点 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 在编写对象的时候会对一些类的方法进行定义。但是并没有具体的实现。而是把它们放到子类中去实现,具有灵活性。在抽象类中可以有抽象方法,也可以没有抽象方法。但是有了抽象方法的类一定是抽象类。 抽象类和接口在JA V A中都是用来表述抽象类的。 在面向对象的概念,所以的对象都是通过类来描述的。但反之则不行。若是一个类中没有包含足够的信息描绘一个具体的对象,这个的类就是抽象类。 在JA V A中除了使用抽象类来实现一定程度的抽象外还可以定义一种特殊的抽象方法----接口(interface)。和抽象类的方法不一样,在抽象类中需要加上关键字abstract来表明某个方法是抽象的,但是在接口中则不需要。 相同点: 1.他们都能不能生成实例,都有抽象方法。 2接口是特殊的抽象类。 3.接口和抽象类的继承都使用的关键字是extends。 不同点: 1.接口的定义的变量默认是public static final型,且必须给其赋初值。所以在实现类中不能重新定义,也不能改变其值。而在抽象类中其值在子类中可以重新定义也可以重新赋值。 2.接口的方法默认的都是public abstract类型的。 3.抽象类中可以有构造器,但是接口中除了抽象方法什么都没有。 4.名字不同,接口写的是public interface Shape{}; 而抽象类写的是public abstract class Shape{}; 接口里全部都是抽象方法。而抽象类里可以有抽象方法也可以有其他的方法。接口里的属性都是静态的。但是抽象类的属性可以是任意的。 5.还可以从继承的角度看,接口可以多继承,一个接口可以继承多个接口。但是抽象类却不能,只能是继承一个父类,不能继承多个父类。要是能继承多个父类的话会在父类和子类的方法中有发生冲突。

面向对象--接口与抽象类、对象和接口(通俗讲解)

面向对象--接口与抽象类的恩恩怨怨 接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。就我自己的一点心得,发表一下拙见。 面向对象的一些回顾: 面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。这其实也是解耦和的体现。 那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。 说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。是人们要把对现实世界中的一系列方法论应用到程序设计当中来。从对象这一概念的引入我们就可以揣摩这一点。人类社会中有很多对象的概念,人、车、物体。不幸的是用程序来实现这些对象比在概念上定义对象要难很多。 (如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧) MS给出开发者的建议是,用抽象类来实现接口。子类再继承基类。 实例说明: 为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。我们要造车。这个车有个基本的属性就是能移动、还必须有轮子。那我们就设计一个接口 1public interface ICar 2 { 3 string Wheel 4 { 5 get; 6 set; 7 } 8 void Move(); 9 } 10

接下来的事情,就是实现了。造什么车都行,继承一下就行。随着科技的发展,我们的车想要飞了。此时当然不能修改这个接口,因为要遵循开闭原则。为什么要遵循?我们可以想一下,人坐上飞机能飞上天。但是也没见谁认为人有会飞这个特性的。那也好办,不许修改,那我再加一个接口。 1interface IFlyable 2 { 3 void Fly(); 4 } 5 好,我们的飞行汽车最后应该是这样的。 1class FlyCar : ICar,IAerocraft 2 { 3 private string wheel = string.Empty; 4 5 public void Fly() 6 { 7 Console.WriteLine("{0}车飞起来了",this.wheel); 8 } 9 public string Engine 10 { 11 get 12 { 13 return wheel; 14 } 15 set 16 { 17 wheel = value; 18 } 19 } 20 21 public void Move() 22 { 23 Console.WriteLine("{0}轮车在走",this.wheel); 24 } 25 } 26 看起来很不错,车能飞能走了。那它现在他的祖宗到底车还是飞行器呢?我们自己在心里辩论一下吧。估计不是很容易辩清楚。 我们前面说过,面向对象的思想来源于现实生活。如果把这组例子引入到现实中来,造会飞的汽车。肯定是要在原有的汽车上面下功夫。比如你装上喷气动力装置,或者装上翅膀。

Java实验7抽象类和接口

实验6 抽象类和接口 一、实验目的: 1、学习掌握抽象类的概念和使用方法。 2、学习掌握接口的概念和定义接口的方法。 3、学习使用Cloneable接口和clone方法进行对象内容的复制。 4、理解浅复制和深复制的概念,掌握覆盖clone方法进行对象内容深复制 的技术。 二、实验任务: 1、学习掌握抽象类的概念和使用方法。程序要求: (1)首先创建一个类家族,其中抽象类几何图形类GeometricObject为父类,圆类Circle和矩形类Rectangle为子类。几何图形类 GeometricObject中定义保护型字符串变量color,表示图形的颜色; 该类要具备构造方法和两个抽象方法findArea和findPerimeter,抽 象方法findArea求图形面积,抽象方法findPerimeter求图形周长。 (2)Circle类和Rectangle类是GeometricObject类的子类,其中应实现父类的抽象方法。 (3)程序主方法中创建两个几何对象,一个圆和一个矩形,并用GeometricObject类的引用变量引用它们,调用抽象方法。 2、学习接口的概念和利用接口实现多态的方法。程序要求如下: (1)首先创建圆类Circle和圆柱体类Cylinder,其中Circle类是父类,Cylinder类是子类; (2)创建接口Comparable,其中包含一个抽象方法compareTo,用来比较对象的大小。抽象方法compareTo的形式如下: public int compareTo(Object o); (3)创建类ComparableCircle,该类为Circle类的子类,并实现

PHP语言面向对象的内容

PHP语言面向对象的内容 PHP是一个知识容量很大的语言,下面为大家介绍关于PHP语言面向对象的内容,欢迎大家阅读! 类定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。 对象是类的实例。 成员变量定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。 成员函数定义在类的内部,可用于访问对象的数据。 继承继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。 父类一个类被其他类继承,可将该类称为父类,或基类,或超类。 子类一个类继承其他类称为子类,也可称为派生类。 多态多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 抽象性抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。 封装封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。 构造函数主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。 析构函数析构函数(destructor)与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后"的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用释放)。

C++中抽象类和接口的区别

抽象类和接口的区别 抽象类:抽象类是特殊的类,只是不能被实例化(将定义了一个或多个纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。虽然不能定义抽象类的实例,但是可以定义它的指针,并且指向抽象类的指针实际上在赋值时是指向其继承类的实例化对象的,这样通过统一的使用该指针可以很好的封装不同子类的实现过程,这在模式设计的过程中得到了极大的应用! 接口:接口是一个概念。它在C++中用抽象类来实现,在C#和Java中用interface来实现。 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性: 接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 抽象类和接口的区别: 1.接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

PHP复习资料

1、PHP的概念和PHP语言的优势。 一种应用广泛、功能强大的嵌入HTML中开放源代码的脚本语言。尤其适合 WEB 开发。特点:1.开放源代码、支持多种数据库,完全免费。 2.效率高:PHP消耗相当少的系统资源。 3.易学易用,功能强大。跨平台的。可以运行在UNIX、LINUX、WINDOWS下。 4.嵌入HTML:因为PHP可以嵌入HTML语言,学习起来并不困难。 5.PHP5是面向对象的。 优势:1.将程序嵌入到HTML文档中执行,执行效率比完全生成HTML标记的CGI要高; 2.在服务器端执行,充分利用服务器的性能 3.将用户经常访问的PHP程序驻留在内存中,其他用户再次访问时不需要重新编译程序,直接执行代码就可以。 2、PHP常用的嵌入方式 方法一:PHP标准结构, 方法二:PHP的简短风格, 注意:此方法需要在php.ini中去配置才能生效,开启 short_open_tag = on 方法三:PHP的script风格, 方法四:asp风格,<% … %> <% echo "Hi, I'm a PHP script!"; %> 注意:此方法需要在php.ini中去配置才能生效,开启 asp_tags = on 3、PHP的常量和变量 变量:变量的名称是对大小写敏感的,正确设置方法是$var_name=value,一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线,不能包含空格。PHP5开始,长格式的PHP预定义变量可以通过设置register_long_arrays来屏蔽。$_COOKIE,经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。 $_FILES,经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)。 $_ENV,执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。 $_REQUEST,经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。$_SESSION,当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)。 REQUEST_METHOD,获得对应页面方法。如:get、post QUERY_STRING,获取对应页面的请求字符串。 DOCUMENT_ROOT,获得根目录。 HTTP_REFERER,链接到当前页面的前一页面的 URL 地址 REMOTE_ADDR,正在浏览当前页面用户的 IP 地址。用法:$_SERVER['QUERY_STRING'] 常量:标识符大写,大小写敏感,在程序脚本执行期间该值不能改变。可以用 define() 函数来定义常量,函数的第一个参数表示常量名,第二个参数表示常量的值。常量名遵循标识符命名规则;只能包含标量数据(boolean,integer,float 和 string) __LINE__,文件中的当前行号。

相关主题
文本预览
相关文档 最新文档