封装,继承,多态,抽象,接口

封装,继承,多态,抽象,接口

ID:38520826

大小:955.39 KB

页数:31页

时间:2019-06-14

封装,继承,多态,抽象,接口_第1页
封装,继承,多态,抽象,接口_第2页
封装,继承,多态,抽象,接口_第3页
封装,继承,多态,抽象,接口_第4页
封装,继承,多态,抽象,接口_第5页
资源描述:

《封装,继承,多态,抽象,接口》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.1封装封装是面向对象编程的三大特征之一。封装就是将通过抽象得到的属性和方法相结合,形成一个有机的整体——“类”。封装的目的是增强数据安全性和简化编程,使用者不必了解具体的实现细节,所有对数据的访问和操作都必须通过特定的方法,否则便无法使用,从而达到数据隐藏的目的。封装是面向对象编程语言对客观世界的模拟,客观世界的属性都是被隐藏在对象内部的,外界不能直接进行操作或者修改。譬如:常见的空调电视机等对象,这些对象都是封装好的,普通人只可以通过对小小的按钮操作来控制这些家电;不可以随意打开设备进行修改对象内容

2、的配置。但是专业人员可以修改这些家电,而我们就是要做这些“专家”;如下图所示。操作按钮操作按钮图1.1.1封装对象1.1.1为什么需要封装通过第一阶段的学习,我们知道类由属性和方法组成,在类的外部通过本类的实例化对象可以自由访问和设置类中的属性信息,这样不利于属性信息的安全,示例1.1就是如此。示例1.1publicclassPerson{publicStringname;publicintage;publicvoidsayHello(){System.out.print("你好!");}}publicc

3、lassTest{publicstaticvoidmain(String[]args){Personp=newPerson();p.name="皇帝";p.age=1000;//属性信息可以直接设置p.sayHello();}}上述代码在第一阶段Java的课程中经常见到,大致一看没什么问题,但是仔细分析过之后会发现:把年龄设置成1000合理吗?由于Person类的属性都是公有的(public),那也就意味着在Person类的外部,通过Person类的实例化对象可以对这些公有属性任意修改,这就使得我们无法对

4、类的属性进行有效的保护和控制。这属于设计上的缺陷,那能不能避免这种情况呢?这就需要用到下面的封装了。1.1.1现实生活中的封装现实生活中封装的例子随处可见,例如药店里出售的胶囊类药品,我们只需要知道这个胶囊有什么疗效,怎么服用就行了,根本不用关心也不可能去操作胶囊的药物成分和生产工艺。再例如家家户户都用的电视机,我们只需要知道电视机能收看电视节目,知道怎么使用就行了,不用关心也不可能去搞清楚电视机内部都有哪些硬件以及是如何组装的。这些都是现实生活中封装的例子。在刚才的两个例子中,我们可以认为药物成分是胶囊

5、的属性,但是用户不需要也不可能去操作它。我们也可以认为内部硬件是电视机的属性,但是用户也不需要去操作它。这就是现实生活中封装的特征,程序中的封装与此类似。1.1.2程序中的封装封装就是:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。简而言之,封装就是将类的属性私有化,并提供公有方法访问私有属性的机制,我们看示例1.2。示例1.2publicclassPerson{//将属性使用private修饰,从而隐藏起来privateStr

6、ingname;privateintage;publicvoidsayHello(){System.out.print("你好!");}}publicclassTest{publicstaticvoidmain(String[]args){Personp=newPerson();p.name="杰克";//编译报错p.age=1000;//编译报错p.sayHello();}}大致一看这段代码跟前面的代码没什么两样,其实只是做了一点改动,Person类中属性的访问修饰符由public改成了private,

7、即属性私有化了。这样一改就造成了main方法中的两行代码出现了编译错误,因为私有属性只能在其所在类的内部使用,在类的外部就无法访问了。1.1.1如何实现封装(1)使用private修饰符将类的属性私有化,如示例1.3所示。使用private修饰的属性只能在类的内部调用,访问权限最小。示例1.3publicclassPerson{privateStringname;privateintage;}(2)属性被私有化之后在类的外部就不能访问了,我们需要给每个属性提供共有的Getter/Setter方法,如示例1

8、.4所示。示例1.4publicclassPerson{privateStringname;privateintage;publicStringgetName(){//获得name属性的getter方法returnname;}publicvoidsetName(Stringname){//设置name属性的setter方法this.name=name;}publicintgetAge(){//获得age属性的getter方法r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。