封装与隐藏
1.理解封装的概念
封装是面向对象三大特质之一(继承和多态),它指的是将对象的状态信息封装在对象内部,不允许外部程序直接访问,而是通过该类所提供的方法实现对内部信息的操作和访问。
对一个类或对象进行封装可以实现以下目的:
- 隐藏类实现的细节
- 让使用者只能通过预定的方法进行访问数据,从而可以在该方法内加入逻辑控制,限制对成员变量不合理的访问。
- 可以进行数据检测,从而利于保证对象信息的完整性
- 便于修改,提高代码的可维护性
为了实现封装需要从两个方面考虑:
- 将成员变量和实现细节隐藏起来,不允许外部直接访问(Java提供了访问控制修饰符)
- 把公有的方法暴露出来,让方法控制这些成员变量进行安全的访问和操作
2.访问控制修饰符
Java提供了3个访问修饰符 private、 protected和public分别代表3个访问控制级别,除此以外系统还有一个不加任何访问修饰符的访问控制级别就是默认defalut,总共提供了4个访问修饰符。Java的访问控制修饰符控制级别由小到大如下:
private ------->default-------->protected------>public
访问控制修饰符的范围
![7a9ff4102d0788baf687e50cd5ca20c0.png](https://i-blog.csdnimg.cn/blog_migrate/892410bd5891dda236c72d86d530b4df.png)
Private:私有的,只能本类中使用
Default:默认的访问级别 可以在同一个类中,同一个包中使用
Protected:受保护的级别 能在同一个类中,同一个包中,不同包的子类中使用
Public:公有的 任意类都可以使用
public
3.包
包的概念:包是用来区分类的。可以在不同的包中使用相同的类名。
Java允许将一组相关的功能放在同一个包下,java提供了多层空间命名,主要是用于解决类命名的冲突。Java的包的命名规则如下:
package packagename 倒域名的方式进行命名
组织机构名.公司名.项目名.模块名.子模块
com.guigu.shopping.product.dao
![669eca46de5be491ff5b6b839e22a691.png](https://i-blog.csdnimg.cn/blog_migrate/64768d47db0ac4c8c73a958ab7e9f7d8.png)
编译程序:
![964f9650800d41a80f1d6d048ef9fe2d.png](https://i-blog.csdnimg.cn/blog_migrate/5252f29b4ed9175dd15a608e24319995.png)
-d选项是用于设置编译生成class文件的保存位置,这里是使用(.)就是在当前路径下生成。
在不同的包下建立文件Apple:
![320a8616d4c04f844039e1a3cf9a80ea.png](https://i-blog.csdnimg.cn/blog_migrate/1153abecc8fae05e7ec48c85b1b381b2.png)
![b8ba66fc42f98e3db8b07e53bcb93414.png](https://i-blog.csdnimg.cn/blog_migrate/e941d6c7841056593033e74e828be5a6.png)
3.1普通导入包
导包的关键字 import
导入需要类的具体包或者指向具体的类即可。
导包的时候 可以使用*替代具体的类名或者包名代表把当前包下所有的类全部都导入
Import导包可以出现多次
Java默认为所有的类都导入了java.lang.*这个包下所有的类比如System
![c701604c9fa99452294529eae8c79d2a.png](https://i-blog.csdnimg.cn/blog_migrate/f9e28edaf30c319d547eecce6d34ef75.png)
3.2静态导入
JDK1.5之后增加了一种静态导入的语法,它用于指定某个类的静态成员变量,方法或者全部的成员变量方法 都导入到指定的类中。
静态导入使用import static packagename ;
![v2-933c3a906b913aa284fceaeab7bdb089_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=395d4673-bb2d-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-933c3a906b913aa284fceaeab7bdb089_b.jpg)