本篇会加入个人的所谓‘鱼式疯言’
❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!
前言
小伙伴们有了解过面向对象的三大特性吗?
分别是:封装,继承,多态。
接下来的文章小编讲带着大家重点理解 封装,继承,多态 。
而在本篇文章中小编讲解的就是我们面向对象的第一式: 封装
目录
- 封装
- 封装扩展之包
- 访问限定符
- static 成员
- 代码块
一. 封装
1. 封装的概念
面向对象程序三大特性:封装、继承、多态。
而类和对象阶段,主要研究的就是封装特性。何为封装呢?
简单来说
就是 套壳屏蔽细节。
比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器,USB插孔等
让用户来和计算机进行交互,完成日常事务。
但实际上:电脑真正工作的却是CPU、显卡、内存等一些硬件元件。
对于计算机使用者而言,不用关心 内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等…
用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此 计算机厂商在出厂时,在外部套上壳
子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。
这时小伙伴应该就可以引出咱封装的概念了吧 ! ! !
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互
但在谈及封装的理解之前,小编就不得不先介绍一下我们的封装扩展的包 的概念了 💕 💕 💕
二. 封装扩展之包
这时小爱同学又蒙圈了了,啥是包呢,为啥我们了解封装之前要提及包的概念呢 ? ? ?
小伙伴们不妨先带着这些疑问来慢慢和小编一起探讨吧 ❤️ ❤️ ❤️
1. 包的概念
在面向对象体系中,提出了一个软件包的概念,
即:为了更好的管理类,把多个类收集在一起成为一组,称为 软件包。
有点类似于 目录 。
比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性 的歌曲放在相同文件下
也可以对某个文件夹下的音乐进行更详细的分类。
在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,
比如:一个包中的类不想被其他包中的类使用。
包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
举个栗子
Java 中已经提供了很多 现成的类 供我们使用.
例如 Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类.
class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
但是这种写法比较麻烦一些, 可以使用 import 语句导入包.
import java.util.Date;
class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
如果需要使用 java.util 中的其他类, 可以使用 import java.util.
import java.util.*;
class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
鱼式疯言
但是小编更建议 显式的指定要导入的类名. 否则还是容易出现冲突的情况.
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
Date date = new Date();
System.out.println(date.getTime());
}
// // 编译出错
// Error:(5, 9) java: 对Date的引用不明确
// java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
}
在这种情况下需要使用完整的类名
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}
2.自定义包
<1>基本规则
-
在文件的最上方加上一个 package 语句指定该代码在哪个包中.
-
包名需要尽量指定成唯一的名字, 通常会用公司的域名的