请选择 进入手机版 | 继续访问电脑版

[java] Java基础第四篇 封装与接口

[复制链接]
查看74 | 回复21 | 2021-9-12 20:44:16 | 显示全部楼层 |阅读模式
目次

媒介 :

总结之前的内容,对象(

  1. object
复制代码
)指代某一事物,类(class)指代象的范例 。对象可以有状态和动作,即数据成员和方法。

到如今 为止,数据成员和方法都是同时开放给内部和外部的。在对象内部,我们使用

  1. this
复制代码
来调用对象的数据成员和方法。在对象外部,比如当我们在另一个类中调用对象的时,可以使用
  1. 对象
复制代码
.
  1. 数据成员
复制代码
  1. 对象
复制代码
.
  1. 方法()
复制代码
来调用对象的数据成员和方法。

1、封装与接口

封装(encapsulation)是计算机常见的术语,即保留有限的外部

  1. 接口(interface),
复制代码
隐蔽 具体 实行 细节。比如在Linux架构,就可以看到Linux操作体系 封装了底层硬件的具体 细节,只保留了体系 调用这一套接口。用户处在封装的外部,只能通过接口,举行 所需的操作。

封装在生存 中很常见。比如下面是一个充电电筒:

Java基础第四篇 封装与接口

一个用户即使不看阐明 书,也可以猜到这个电筒的操作: 开关和充电。这个电筒用一个塑料壳将用户不必要 打仗 的内部细节隐蔽 起来,只保留了两个接口,开关和电插头。使用 这两个接口,用户足以使用 该产品在计划 中想要实现的功能。假如 全部 的细节都同时暴露给用户,那么用户会对产品感到不知所措 (比如下面不加壳的遥控器)。因此,封装进步 了产品的

  1. 易用性
复制代码

Java基础第四篇 封装与接口

 

假如 产品不封装,电筒或者遥控器的很多 细节会暴露在用户眼前 : 电池、电路、密封的橡胶等等。只管 这可以让用户更自由的对产品实行 操作,比如直接给电池放电,取出一个LED灯等等。然而,用户每每 要承担更大的破坏 产品的风险。因此,封装进步 了产品的

  1. 安全性
复制代码

 

一个Java软件产品与一个一样平常 产品雷同 。一个对象内部可以有很多 成员(数据成员和方法)。有一些数据成员和方法只是内部使用 。这时,我们会盼望 有一个给对象“加壳”的机制,从而封装对象。如许 ,用户可以比较容易 学习和使用 外部的接口,而不必打仗 内部成员。

2、对象成员的封装

Java通过三个关键字来控制对象的成员的外部

  1. 可见性(visibility
复制代码
):
  1. public
复制代码
,
  1. private
复制代码
,
  1. protected
复制代码

  • public: 该成员外部可见,即该成员为接口的一部分
  • private: 该成员外部不可见,只能用于内部使用 ,无法从外部访问。

(protected涉及继承的概念,放在以后说)

我们先来封装从前 定义的Human类:

  1. public class Test
  2. {
  3. public static void main(String[] args)
  4. {
  5. Human aPerson = new Human(160);
  6. System.out.println(aPerson.getHeight());
  7. aPerson.growHeight(170);
  8. System.out.println(aPerson.getHeight());
  9. aPerson.repeatBreath(100);
  10. }
  11. }
  12. class Human
  13. {
  14. /**
  15. * constructor
  16. */
  17. public Human(int h)
  18. {
  19. this.height = h;
  20. System.out.println("I'm born");
  21. }
  22. /**
  23. * accessor
  24. */
  25. public int getHeight()
  26. {
  27. return this.height;
  28. }
  29. /**
  30. * mutator
  31. */
  32. public void growHeight(int h)
  33. {
  34. this.height = this.height + h;
  35. }
  36. /**
  37. * encapsulated, for internal use
  38. */
  39. private void breath()
  40. {
  41. System.out.println("hu...hu...");
  42. }
  43. /**
  44. * call breath()
  45. */
  46. public void repeatBreath(int rep)
  47. {
  48. int i;
  49. for(i = 0; i < rep; i++) {
  50. this.breath();
  51. }
  52. }
  53. private int height; // encapsulated, for internal use
  54. }
复制代码

内部方法并不受封装的影响。

  1. Human
复制代码
的内部方法可以调用恣意 成员,即使是设置为
  1. private
复制代码
  1. height
复制代码
  1. breath
复制代码
()

外部方法只能调用

  1. public
复制代码
成员。当我们在
  1. Human
复制代码
外部时,比如
  1. Test
复制代码
中,我们只能调用
  1. Human
复制代码
中规定为
  1. public
复制代码
的成员,而不能调用规定为
  1. private
复制代码
的成员。

通过封装,Human类就只保留了下面几个方法作为接口:

  • getHeight()
  • growHeight()
  • repBreath()

我们可以将Human类及其接口表示为如下图的情势 :

Java基础第四篇 封装与接口

上图就如“加了壳的遥控器”

假如 我们从

  1. main
复制代码
中强行调用
  1. height
复制代码
:

  1. <strong>System.out.println(aPerson.height);</strong>
复制代码

将会有如下错误提示:

  1. Test.java:6: height has private access in Human
  2. System.out.println(aPerson.height);
  3. ^
  4. 1 error
复制代码

Beep, 你触电了! 一个被阐明 为

  1. private
复制代码
的成员,不能被外部调用。

在Java的通常规范中,表达状态的

  1. 数据成员
复制代码
(比如height)要
  1. 设置成private
复制代码
。对数据成员的修改要通过接口提供的方法举行 (比如getHeight()和growHeight())。这个规范起到了保护数据的作用。用户不能直接修改数据,必须通过相应的方法才能读取和写入数据。类的计划 者可以在接口方法中加入数据的使用 规范。

3、类的封装

在一个.java文件中,有且只能有一个类带有

  1. public
复制代码
关键字,比如上面的
  1. Test
复制代码
类。以是 ,从恣意 其他类中,我们都可以直接调用该类。
  1. Human
复制代码
类没有关键字。更早之前,我们对象的成员也没有关键字。这种没有关键字的环境 也代表了一种可见性,我将在包(
  1. package
复制代码
)的讲解中深入。

4、总结

  1. 封装,接口
  2. private, public
复制代码

到此这篇关于Java基础 第四篇 封装与接口的文章就先容 到这了,更多相干 Java 的封装与接口内容请搜索 脚本之家从前 的文章或继续欣赏 下面的相干 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 尘埃384 | 2021-9-18 04:28:14 | 显示全部楼层
我默默的回帖,从不声张!
回复

使用道具 举报

avatar 成哥337 | 2021-9-19 20:48:40 | 显示全部楼层
刚分手,心情不好!
回复

使用道具 举报

avatar 123457242 | 2021-9-20 00:22:09 | 显示全部楼层
admin楼主的帖子提神醒脑啊!
回复

使用道具 举报

avatar 胖胖龙龙灯 | 2021-9-25 20:57:20 | 显示全部楼层
admin楼主的头像能辟邪啊!
回复

使用道具 举报

avatar 淡淡清水1314 | 2021-9-26 23:01:44 | 显示全部楼层
我和我的小伙伴都惊呆了!
回复

使用道具 举报

avatar 啤酒瓶空了缓 | 2021-10-1 09:09:16 | 显示全部楼层
admin楼主又闹绯闻了!
回复

使用道具 举报

avatar 刘冠华 | 2021-10-4 09:46:29 | 显示全部楼层
记得吃药!
回复

使用道具 举报

avatar 123457044 | 2021-10-5 04:49:17 | 显示全部楼层
今天上网不回帖,回帖就回精华帖!
回复

使用道具 举报

avatar 好时光516 | 2021-10-16 22:31:08 | 显示全部楼层
admin楼主,你妈妈喊你回家吃药!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则