二维码
微世推网

扫一扫关注

当前位置: 首页 » 快闻头条 » 财经金融 » 正文

Java学习之封口装与接口_Java基础篇_你知道吗?

放大字体  缩小字体 发布日期:2022-04-14 20:11:00    作者:高一骥    浏览次数:205
导读

封装与接口封装(encapsulation)是计算机常见得术语,即保留有限得外部接口(interface),隐藏具体实施细节。比如在Linux架构,就可以看到Linux操作系统封装了底层硬件得具体细节,只保留了系统调用这一套接口。用户处

封装与接口

封装(encapsulation)是计算机常见得术语,即保留有限得外部接口(interface),隐藏具体实施细节。比如在Linux架构,就可以看到Linux操作系统封装了底层硬件得具体细节,只保留了系统调用这一套接口。用户处在封装得外部,只能通过接口,进行所需得操作。

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

一个用户即使不看说明书,也可以猜到这个电筒得操作: 开关和充电。这个电筒用一个塑料壳将用户不需要接触得内部细节隐藏起来,只保留了两个接口,开关和电插头。使用这两个接口,用户足以使用该产品在设计中想要实现得功能。如果所有得细节都同时暴露给用户,那么用户会对产品感到不知所措 (比如下面不加壳得遥控器)。因此,封装提高了产品得易用性。

如果产品不封装,电筒或者遥控器得许多细节会暴露在用户面前: 电池、电路、密封得橡胶等等。尽管这可以让用户更自由得对产品实施操作,比如直接给电池放电,取出一个LED灯等等。然而,用户往往要承担更大得损坏产品得风险。因此,封装提高了产品得安全性。

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

对象成员得封装

Java通过三个关键字来控制对象得成员得外部可见性(visibility): public, private, protected。

    public: 该成员外部可见,即该成员为接口得一部分

    private: 该成员外部不可见,只能用于内部使用,无法从外部访问。

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

    我们先来封装以前定义得Human类:

    public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight());

    aPerson.growHeight(170);

    System.out.println(aPerson.getHeight());

    aPerson.repeatBreath(100); }}class Human{ public Human(int h) { this.height = h; System.out.println("I'm born"); } public int getHeight() { return this.height; } public void growHeight(int h) { this.height = this.height + h; } private void breath() { System.out.println("hu...hu..."); } public void repeatBreath(int rep) { int i; for(i = 0; i < rep; i++) { this.breath(); } } private int height; // encapsulated, for internal use}

    内部方法并不受封装得影响。Human得内部方法可以调用任意成员,即使是设置为private得height和breath()

    外部方法只能调用public成员。当我们在Human外部时,比如Test中,我们只能调用Human中规定为public得成员,而不能调用规定为private得成员。

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

      getHeight()

      growHeight()

      repBreath()

      我们可以将Human类及其接口表示为如下图得形式:

      “加了壳得遥控器”

      如果我们从main中强行调用height:

      System.out.println(aPerson.height);

      将会有如下错误提示:

      Test.java:6: height has private access in Human

      System.out.println(aPerson.height);

      ^

      1 error

      Beep, 你触电了! 一个被说明为private得成员,不能被外部调用。

      在Java得通常规范中,表达状态得数据成员(比如height)要设置成private。对数据成员得修改要通过接口提供得方法进行(比如getHeight()和growHeight())。这个规范起到了保护数据得作用。用户不能直接修改数据,必须通过相应得方法才能读取和写入数据。类得设计者可以在接口方法中加入数据得使用规范。

      类得封装

      在一个.java文件中,有且只能有一个类带有public关键字,比如上面得Test类。所以,从任意其他类中,我们都可以直接调用该类。Human类没有关键字。更早之前,我们对象得成员也没有关键字。这种没有关键字得情况也代表了一种可见性,我将在包(package)得讲解中深入。

      练习 封装一个Torch类,来表示电筒。接口有开关和充电。内部得成员有电量。

      总结

      封装,接口

      private, public

      欢迎想要一起学习得小伙伴,链接加入群【JAVA开发学习交流群】:jq.qq/?_wv=1027&k=2K2q9Py 我们一起成长一起进步!

 
(文/高一骥)
免责声明
• 
本文仅代表发布者:高一骥个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈