【JavaSE】面对对象程序三大特性之封装

目录

一、封装

二、访问限定符 

三、封装扩展之包 

(一)导入包中的类

1.java.util.Date

2.使用 import语句导入包 

3.若使用 java.util 中的其他类, 可以使用 import java.util.* 

4.使用import static导入包中静态的方法和字段 

(二)自定义包 

(三)常见的包 


一、封装

将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互

这里我们可以通过一个例子加深一下理解 

大家都使用过计算机吧?我们在使用计算机时并不关心主板上的线路是如何布局的、CPU的内部是如何设计的等等,我们只需要知道怎么开关机、怎么通过键盘与鼠标与计算机进行交互即可,而且厂家在出厂计算机时将内部细节隐藏起来了,只提供USB插孔、开关机键、鼠标、键盘、显示器等让用户与计算机进行交互,完成日常事务。

二、访问限定符 

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起 

访问限定符同一包中的同一类同一包中的不同类不同包中的子类不同包中的非子类
private
默认
protected
public

private:私有的,只能在当前类中被访问

默认:只能在同一个包中被访问

protected:受保护的,可以在同一包中被访问,也可以在不同包中的子类中访问

               (主要用在继承中)

public:公开的,都可以访问到

注:一般情况下成员变量设置为private,成员方法设置为public

总结:访问限定符的范围大小:public > protected > 默认 > private 

package Test;

public class Computer {
    private String cpu; // cpu
    private 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("上网~~~");
    }
}
package Test;

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类中访问,不能被其他类访问
    }
}

三、封装扩展之包 

为了更好的管理类,把多个类收集在一起成为一组,称为软件包 

这就与我们的文件夹很像,我们日常完成工作的时候,总是会主动的将有共同属性的几个文件放在同一个文件夹中,或者是将同一个工作内容的不同文件夹放在同一个文件夹中

在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。

包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可

(一)导入包中的类

Java 中已经提供了很多现成的类供我们使用. 例如Date类:可以使用 java.util.Date 导入 java.util 这个包中的 Date类

1.java.util.Date

这种写法比较复杂 

public class Test {
    public static void main(String[] args) {
        java.util.Date date = new java.util.Date();
        // 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

2.使用 import语句导入包 

import java.util.Date;

public class Test1 {
    public static void main(String[] args) {
        Date date = new Date();
        // 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

3.若使用 java.util 中的其他类, 可以使用 import java.util.* 

import java.util.*;

public class Test2 {
    public static void main(String[] args) {
        Date date = new Date();
        // 得到一个毫秒级别的时间戳
        System.out.println(date.getTime());
    }
}

注:更建议显式的指定要导入的类名,否则容易出现冲突 

import java.util.*;
import java.sql.*;

public class Test3 {
    public static void main(String[] args) {
    // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
        Date date = new Date();
        System.out.println(date.getTime());
    }
}

此时需要使用完整的类名 

import java.util.*;
import java.sql.*;

public class Test3 {
    public static void main(String[] args) {
    // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
        java.util.Date date = new java.util.Date();
        System.out.println(date.getTime());
    }
}

4.使用import static导入包中静态的方法和字段 

import static java.lang.Math.*;

public class Test4 {
    public static void main(String[] args) {
        double x = 30;
        double y = 40;
        // 静态导入的方式写起来更方便一些.
        //double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
        double result = sqrt(pow(x, 2) + pow(y, 2));
        System.out.println(result);
    }
}

  

(二)自定义包 

操作步骤:

1.在IDEA中创建一个包

2. 在弹出的对话框中输入包名

3. 在包中创建类

4.此时包就被创建好啦

(三)常见的包 

  1.  java.lang:系统常用基础类(String、Object)
  2. java.lang.reflect:java 反射编程包
  3. java.net:进行网络编程开发包
  4. java.sql:进行数据库开发的支持包
  5. java.util:是java提供的工具程序包
  6. java.io:I/O编程开发包
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨染无尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值