衡水做网站的公司,免费发广告的软件,360搜索指数,网站常用字体大小⭐ 作者#xff1a;小胡_不糊涂 #x1f331; 作者主页#xff1a;小胡_不糊涂的个人主页 #x1f4c0; 收录专栏#xff1a;浅谈Java #x1f496; 持续更文#xff0c;关注博主少走弯路#xff0c;谢谢大家支持 #x1f496; 封装 1. 什么是封装2. 访问限定符3. 封装… ⭐ 作者小胡_不糊涂 作者主页小胡_不糊涂的个人主页 收录专栏浅谈Java 持续更文关注博主少走弯路谢谢大家支持 封装 1. 什么是封装2. 访问限定符3. 封装扩展之包3.1 什么是包3.2 导入包中的类3.3 自定义包3.4 包的访问权限控制举例3.5 常见的包 1. 什么是封装
面向对象程序三大特性 封装、继承、多态。 而类和对象阶段主要研究的就是封装特性。何为封装呢简单来说就是套壳屏蔽细节。
封装从语法上来说就是被private修饰的成员变量或者成员方法只能在当前类当中使用
比如对于电脑这样一个复杂的设备提供给用户的就只是开关机、通过键盘输入显示器USB插孔等让用户来和计算机进行交互完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。 对于计算机使用者而言不用关心内部核心部件用户只需要知道怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。 因此计算机厂商在出厂时在外部套上壳子将内部实现细节隐藏起来仅仅对外提供开关机、鼠标以及键盘插孔等让用户可以与计算机进行交互即可。 封装 将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互。 2. 访问限定符
Java中主要通过类和访问权限来实现封装类可以将数据以及封装数据的方法结合在一起更符合人类对事物的认知而访问权限用来控制方法或者字段能否直接在类外使用。
Java中提供了四种访问限定符
范围privatedefaultprotectedpublic同一包的同一类√√√√同一包的不同类√√√不同包中的子类√√不同包中的非子类√ 比如 public可以理解为一个人的外貌特征谁都可以看得到 default对于自己家族中(同一个包中)不是什么秘密对于其他人来说就是隐私了 private只有自己知道其他人都不知道 【说明】
protected主要是用在继承中default权限指什么都不写时的默认权限访问权限除了可以限定类中成员的可见性也可以控制类的可见性
实例创建连两个类
//代码一:
public class Computer {private String cpu; // cpuprivate String memory; // 内存public String screen; // 屏幕String brand; // 品牌----default属性public Computer(String brand, String cpu, String memory, String screen) {this.brand brand;this.cpu cpu;this.memory memory;this.screen screen;}public void Boot(){System.out.println(开机~~~);}public void PowerOff(){System.out.println(关机~~~);}public void SurfInternet(){System.out.println(上网~~~);}
}//代码二
public class TestComputer {public static void main(String[] args) {Computer p new Computer(HW, i7, 8G, 13*14);System.out.println(p.brand); // default属性只能被本包中类访问System.out.println(p.screen); // public属性 可以任何其他类访问//System.out.println(p.cpu); // private属性只能在Computer类中访问不能被其他类访问p.Boot();p.PowerOff();p.SurfInternet();}}运行结果 注释掉System.out.println(p.cpu); 一般情况下成员变量设置为private成员方法设置为public
3. 封装扩展之包
3.1 什么是包 在面向对象体系中提出了一个软件包的概念即为了更好的管理类把多个类收集在一起成为一组称为软件包。 有点类似于目录。比如为了更好的管理电脑中的歌曲一种好的方式就是将相同属性的歌曲放在相同文件下也可以对某个文件夹下的音乐进行更详细的分类。 在Java中也引入了包包是对类、接口等的封装机制的体现是一种对类或者接口等的很好的组织方式。 比如一个包中的类不想被其他包中的类使用。 包还有一个重要的作用在同一个工程中允许存在相同名称的类只要处在不同的包中即可。 3.2 导入包中的类
Java 中已经提供了很多现成的类供我们使用。
例如Date类可以使用 java.util.Date 导入java.util 这个包中的 Date类。
public class Test {public static void main(String[] args) {java.util.Date date newjava.util.Date();// 得到一个毫秒级别的时间戳System.out.println(date.getTime());}
}上面这种写法比较麻烦一些可以使用 import 语句导入包
import java.util.Date;
public 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.*;
public 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());}
}
//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());}
}使用import static导入包中静态的方法和字段
//方法一
public class Test {public static void main(String[] args) {double x 30;double y 40;double result Math.sqrt(Math.pow(x, 2) Math.pow(y, 2));System.out.println(result);}
}//方法二
import static java.lang.Math.*;
public class Test {public static void main(String[] args) {double x 30;double y 40;double result sqrt(pow(x, 2) pow(y, 2));System.out.println(result);}
}运行代码 注 import 和 C 的 #include 差别很大。C 必须 #include 来引入其他文件内容但是 Java 不需要。import 只是为了写代码的时候更方便。import 更类似于 C 的 namespace 和 using。
3.3 自定义包
基本规则
在文件的最上方加上一个 package 语句指定该代码在哪个包中包名需要尽量指定成唯一的名字通常会用公司的域名的颠倒形式(例如 com.bit.demo1 )包名要和代码路径相匹配。例如创创com.bit.demo1 的包那么会存在一个对应的路径 com/bit/demo1 来存储代码如果一个类没有 package 语句则该类被放到一个默认包中
操作步骤
在 IDEA 中先新建一个包右键 src -- 新建 -- 包 在弹出的对话框中输入包名例如 test.demo1 在包中创建类右键包名 - 新建 - 类然后输入类名 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了 同时我们也看到了在新创建的 test1.java 文件的最上方就出现了一个 package 语句
3.4 包的访问权限控制举例
Computer类位于com.bit.demo1包中TestComputer位置com.bit.demo2包中
//代码一
package com.bit.demo1;public class Computer {private String cpu; // cpuprivate String memory; // 内存public String screen; // 屏幕String brand; // 品牌public Computer(String brand, String cpu, String memory, String screen) {this.brand brand;this.cpu cpu;this.memory memory;this.screen screen;}public void Boot(){System.out.println(开机~~~);}public void PowerOff(){System.out.println(关机~~~);}public void SurfInternet(){System.out.println(上网~~~);}
}//代码二
package com.bite.demo2;
import com.bite.demo1.Computer;public class TestComputer {public static void main(String[] args) {Computer p new Computer(HW, i7, 8G, 13*14);System.out.println(p.screen);// System.out.println(p.cpu); // 报错cup是私有的不允许被其他类访问// System.out.println(p.brand); // 报错brand是default不允许被其他包中的类访问}
}如果去掉Computer类之前的public修饰符代码也会编译失败
3.5 常见的包
包名作用java.lang系统常用基础类(String、Object),此包从JDK1.1后自动导入java.lang.reflectjava 反射编程包java.net进行网络编程开发包java.sql进行数据库开发的支持包java.util是java提供的工具程序包(集合类等) 非常重要java.ioI/O编程开发包