本文已参与「新人创造礼」活动,一同开启创造之路。 本篇博客首要给咱们介绍以下内容:

一篇文章带你搞定Java封装

大一狗学不过来了,咱们多多支撑呀~

1.封装的概念

面临对象程序有三大特性:封装、承继、多态。而类和对象阶段,首要研究的便是封装特性。何为封装呢?简略来说便是套一个壳来荫蔽细节
比方:电脑这样一个担任的设备,供给给用户的就仅仅一些很简单上手的功能:开关机、经过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,以此来完成日常事务
但一个计算机,真实工作的是黑匣子里面的CPU、显卡、内存等一些硬件元件。

一篇文章带你搞定Java封装

关于计算机运用者而言,不用去关怀内部的中心不见,比方主板上的线路是怎样布局的?CPU是怎样规划的?
用户只需求知道,怎样开机、怎样经过键盘和鼠标与计算机进行交互即可。
因而计算机厂商在出厂的时分,在外部套上壳子,将内部的完成细节躲藏起来,仅仅对外供给开关机、鼠标以及键盘插孔等,让用户能够与计算机进行交互即可,这样能让用户操作更舒适,也更进一步得保护电脑主机。关于咱们写的程序来说也是这样
那么就能够引出Java中封装的概念
封装:将数据和操作数据的方法进行有机结合,躲藏对象的特点和完成细节,进对外揭露接口来和对象进行交互

2.拜访限制符

Java中首要经过类和拜访权限来完成封装:类能够将数据以及封装数据的方法结合在一同,更符合人类对事物的认知,而拜访权限用来操控方法或许字段能否直接在类外运用
Java中供给了四种拜访限制符:

No 范围 private defaul protected public
1 同一包中的同一类
2 同一包中的不同类
3 不同包中的子类
4 不同包的非子类

比方:
public:能够理解为一个人的表面特征,谁都能够看到
default:关于自己家族中(同一个包中)不是什么隐秘,关于其他人来说便是隐私了
private:只需自己知道,其他人都不知道
【阐明】:

  • protected首要是用在承继中,这一部分后边我会给咱们介绍
  • defaul权限便是指默许权限
  • 拜访权限除了能够限制类中成员的可见性,也能够操控类的可见性

这是一个计算机的类

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("网上冲浪!!");
    }
}
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类中拜访,不能被其他类拜访
    }
}

3.封装扩展之包

3.1包的概念

在面向对象系统中,提出了一个软件包的概念,即:**为了更好的办理,把多个类搜集在一同为一组,称为软件包。**有点类似于文件目录。

一篇文章带你搞定Java封装

在Java中也引入了包的概念,包是对类、接口等的封装机制的体现,是一种对类或许接口等的很好的组织方式,比方:一个包中的类不想被其他包中的类运用。包还有一个重要的作用:在同一个工程中答应存在相同称号的类,只需处在不同的包中即可。(听不懂没关系,下面我会举例一一分析的~)

3.2导入包中的类

Java中现已供给了很多现成的类供咱们运用.例如Date类:能够运用java.util.Date导入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());
    }
}

可是这种写法比较麻烦一些,能够运用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());
    }
}

可是咱们更主张显式的指定要导入的类名,否则还是简单出现抵触的状况

一篇文章带你搞定Java封装

咱们要完善好导入的途径
一篇文章带你搞定Java封装

咱们也能够运用import static导入包中静态的方法和字段。

import static java.lang.Math.*;
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));
        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句子,则该类被放到一个默许包中。

操作步骤

首先创立包

一篇文章带你搞定Java封装


咱们这样输入之后,出来的是一个只需一行的包

一篇文章带你搞定Java封装


不用着急, 咱们把compact middle packages撤销勾选

一篇文章带你搞定Java封装


这样层次感就出来啦

一篇文章带你搞定Java封装


中心的bit包中依旧能够导包!

一篇文章带你搞定Java封装


咱们这儿调查一个小细节:

一篇文章带你搞定Java封装


package 为声明包的途径
此时咱们在TestDemo2下调用demo1包中的TestDemo类:

一篇文章带你搞定Java封装


咱们能够看到,这儿编译器编译器悄然无声得帮我导入了包中得TestDemo类 :

一篇文章带你搞定Java封装


这时咱们在src目录中再创立一个同名得TestDemo类:

一篇文章带你搞定Java封装


咱们在这儿必须要经过这种类似于绝对途径的方式来调用,不能经过导包,由于它们的姓名都相同,就算是导包也解决不了重名的问题,编译器辨认不了 :

一篇文章带你搞定Java封装


上面也介绍到了,包拜访权限便是咱们所说的默许权限。

是不是还有些含糊,不要着急,我再用代码为你演示一遍

一篇文章带你搞定Java封装

包权限便是默许权限,意思便是a这个成员变量在demo1这个包底下都能够拜访到
咱们罗列三种状况:
第一种:在本类中
一篇文章带你搞定Java封装

第二种,地点包的其他类中
一篇文章带你搞定Java封装

第三种:
其他包的类当中
一篇文章带你搞定Java封装

咱们就能够验证了包拜访权限便是默许拜访权限了(default)
那么咱们来调查public private润饰往后的权限
一篇文章带你搞定Java封装

咱们在TestDemo中定义了a,b,c三个变量,它们拥有不同的拜访限制润饰符所润饰
那么咱们能够看到在TestDemo这个类中,咱们是能够调用三个数据的
然后咱们在持续看这个demo1底下的别的一个包的调用状况
一篇文章带你搞定Java封装

咱们能够看到,private润饰的c这个成员变量就拜访不到了
接着咱们看其他包中的类引用状况
一篇文章带你搞定Java封装

咱们能够看到只需public润饰的成员变量才能够被拜访到
这个时分那张表格咱们就能够差不多理解了,哪张表格?再给咱们放出来看一下

No 范围 private defaul protected public
1 同一包中的同一类
2 同一包中的不同类
3 不同包中的子类
4 不同包的非子类

咱们常用的包

  1. java.lang:系统常用的基础类(String、Object),此包从JDK1.1后主动导入
  2. java.lang.reflect:Java反射编程包
  3. java.net:进行网络编程开发包
  4. java.sql:进行数据库开发的支撑包
  5. java.util:是java供给的工具程序包(集合类等)
  6. java.io:I/O编程开发包

希望能帮到你~
感谢阅读~