文档库 最新最全的文档下载
当前位置:文档库 › 封装、继承、多态

封装、继承、多态

什么是封装?

答案一:
保护数据成员,不让类以外的程序直接访问或修改,只能通过提供的公共的接口访问==>数据封装
方法的细节对用户是隐藏的,只要接口不变,内部的修改不会影响到外部的调用者==>方法封装

答案二:

当对象含有完整的属性,和与之对应的方法时,称为封装。
从对象外面不能直接访问对象的属性,只能通过和该属性对应的方法来访问。
对象的方法可以接收对象外面的消息。
比如:
Class A
{
private int prop;

public int getProp()
{
return prop;
}

public void setProp(int prop)
{
this.prop = prop;
}
}
属性prop是private的,外界不能直接访问,但是外界可以通过调用getProp()和setProp的方法,给对象发消息,从而完成某种功能。

什么是多态
多态性的概念经常被说成是“一个接口,多种方法”。这意味着可以为一组相关的动
作设计一个通用的接口。多态性允许同一个接口被必于同一类的多个动作使用,这样就降低了程序的复杂性。
再拿狗作比喻,一条狗的嗅觉是多态的。如果狗闻到猫的气味,它会在吠叫并且追着
它跑。如果狗闻到食物的气味,它将分泌唾液并向盛着食物的碗跑去。两种状况下是同一种嗅觉器官在工作,差别在于闻到了什么气味,也就是有两种不同类型的数据作用于狗的鼻子!
在Java中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声
明不同即可。在这种情况下,该方法就被称为重载(overloaded),这个过程称为方法重载(method overloading)。方法重载是Java实现多态性的一种方式。
有两种方式实现多态:
1,继承(子类继承父类(包括abstract class ,interface etc)
2,重载(同一个类中)

==========================================================
如果是面向对象程序设计中的话,我估计是下面这个答案,

面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作
用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类重载基类中的虚函数型方法来实现。

在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完成一系列的动作,具体实现哪个

动作、如何实现由系统负责解释。

“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在C#中,多态性的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性:

● 编译时的多态性

编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

● 运行时的多态性

运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

面向对象的编程方法具有四个基本特征:

1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。

2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。

3.封装:
封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这

些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。


使用了对象就叫基于对象,基于对象的基础上增加了继承从而变成了面向对象。

基于对象的最大特点就是封装,至于private,protected,public,并不是基于对象语言的必须要求。同时应该注意到的是,封装对于应用本身并没有提供太大的帮助;换句话说封装仅仅改变了方法的表达形式,除了析构函数能够提供一些资源安全上的保证,当然java没有析构函数。比如某些网络应用,包装了socket,然而必须的accept,listen,connect,read,write还是需要你自己去调用,只不过调用方式有所变化而已;更麻烦的是处理错误,可能的错误你必须完全接管,那就需要对问题本身有很深入的了解。基于对象让你不容易犯错误,但是不能改变对问题本身的理解。
于是出现了面向对象。继承,多态只是它的特点而已,一种表象。而关键优越性在于它可以改变对问题的认识。比如处处可见的画图的例子,p.Draw(),就能画出一个形状,都是Draw()方法,但是可以根据p的不同,动态选择。无可否认,这个是多态性的优越性的例子。然而继承又如何呢,可以这样说,如果不使用多态,继承就没有意义了。因为没有多态,继承事实上导致了较高层次的包装而已,与基于对象相同,它不能改变对问题本身的理解。很多时候继承被包裹所代替,COM的对象重用,就是典型的包裹,不过它叫聚集而已。类层次越深管理越困难。
面向对象提供了极大的灵活性,然而作为一个概念,外延太丰富,反而不容易把握。看看JFC的文档,实在太灵活了,感觉上这样那样几个东西拼合起来,窗口就可以做

成了。事实却不是如此,你必须去了解layer,了解listener,了解很多东西,然后按照固定的规则进行拼装才能达到效果。简单说,看看javadoc的JFC文档,很难学会如何去实现一个可用的窗口应用。这一点明显比不上VB,其实这就和使用面向对象方法是为了接口易用性这一个基本原则背离了。外延被扩大化到难以接受的规模,这是使用面向对象方法很容易犯的毛病。而设计模式提供了一些方法缓和这些矛盾,比如用静态函数创建对象,私有构造,使得对象不能被任意创建,这就大大压缩了这些对象的外延。简单看看MessageDigest,可能在内部有md2,md4,md5,sha1的类供我创建对象,但是这些我都不让你看到,你只要知道一个MessageDigest就足够了,免得产生误会。

继承:
从具体事物抽象出来的对象类是一种彼此平等的关系,比如各种电话的分类,得到各种电话类:一般按键电话、一般拨盘电话、IC卡电话、传真电话、手持电话等等。对这些类进一步分析,可以发现它们之间还存在一些共性,它们都具有基本电话的功能:如电话都有拨号盘、话筒等组成部分,都具有通过拨号与另一方进行通话的能力。各种具体电话类都在基本电话类的基础上进一步发展自己的特色。所以可以得到电话的一些层次关系。该层次中,处于较高层的类是一般的类,而较低层的类是相对特殊的类。类之间的这种一般和特殊的关系在面向对象方法中用继承来体现。
特殊类的对象拥有其一般类的全部属性与操作,称做特殊类对一般类的继承。一般类是各种是对各种特殊类的共同特性的抽象,特殊类通过继承自动获得一般所具有的特性,因而特殊类中需要再定义属于它自己特定的属性与操作就可以了。特殊类的对象不仅包含它自己类中定义的属性与操作,也包含了在一般类中定义的所有属性和服务。另外,一个一般类可以派生出多个特殊类,不同的特殊类在一般类的基础上增加了不同的特殊性质。
一个类可以继承多个一般类的特性,然后再在继承来的这些一般类的基础上增加自己的特殊性,这种继承方式称为多断承(相应的一个类从一个一般类的继承称为单继承)

为什么要使用继承,它到底有哪些好处呢?好处是有的:


子类提供了特殊的行为,这是在父类中所没有的。通过使用继承,程序员可以多次重新使用在父类中的代码。


程序员可以执行父类(称为抽象类)来定义总的行为。这个抽象的父类可以定义并且部分执行行为,但是绝大多数的父类是未定义和未执行的。其它的部分由程序员来实现特殊的子类。

面向对象的本质:万物皆对象!

封装

:封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流与交互!

继承:继承实际上是存在于面向对象程序中的两个类之间的关系。当一个类拥有另一个类的所有数据和操作时,就称这两个类之间具有继承关系!

多态:多态是指一个程序中同名的不同方法共存的情况。面向对象的程序中多态的情况有多种,可以通过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法!

什么是封装、继承、多态:

封装就是 信息隐藏,隐藏一个对象的本质,让用户不再注意那些细节;

继承就是 指定一个类与另一个类之间的关系。可以修改所需要类的状况和创建信的派生类的对象。这种能力是创建一个类层次的精华。在抽象的外部,继承是系统设计的主要 部分。主要是为了可重用,代码移植,你能在保持父类原有特性及方法的前提下;添加新的特性,方法或者范围更小的约束

多态就是 具有老代码调用新代码的功能,他允许我们增强系统的功能而不破坏现有的代码。
2个好处:1、它能聚集公共的基类对象,并始终如一的处理他们。
2、老的代码可以使用新代码。

相关文档
相关文档 最新文档