Java封装的实现访问限定符、包

目录
  • 一. 封装
  • 二. 访问限定符(修饰符)
  • 三. 包
    • 1. 包的概念
    • 2. 导入包中的类
      • 2.1 导入方法一
      • 2.2 导入方法二
      • 2.3 导入方法三
      • 2.4 导入静态的方法和字段
    • 3. 自定义包
      • 3.1 基本使用规则:
      • 3.2 IDEA中创键自定义包
    • 4. 不同包中的访问权限控制
    • 5. 常见的包
  • 总结

一. 封装

封装是面向对象的三大特性之一;面向对象程序三大特性:封装、继承、多态 。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互(简单来说就是套壳屏蔽细节)。

用生活中的实物来理解封装,比如电脑:

对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,完成日常事务。

但实际上:电脑真正工作的却是CPU、显卡、内存等一些硬件元件。对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可

二. 访问限定符(修饰符)

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制类或者类中方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

public:公开的,可以理解为一个人的外貌特征,谁都可以看得到

protected:受保护的,涉及到继承中的知识,继承博客中详细介绍

default: 什么都不写时的默认权限,对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private:私有的,只有自己知道,其他人都不知道

通过下面给出的代码示例理解封装:

class Person {
    private String name;
    //private修饰的成员变量只能在本类中访问
    private int age;

    String sex;
    //这里不加修饰符即为默认权限,默认是default权限

    public String getName() {
        return name;
    }
    //在其他类中不能直接访问name和age,
    //但可以在本类中提供公开的(public修饰)访问方法和外界进行交互
    //这里就是对成员变量进行了封装
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("姓名:"+name+" 年龄: "+age);
    }
}

public class Test {

    public static void main(String[] args) {
        Person person = new Person();
        //person.name = "bit";//不能直接进行访问
        person.setName("XIN-XIANG荣");
        person.setAge(21);
        //通过提供Person类中提供的方法间接进行访问
        System.out.println(person.getName()+" => "+person.getAge());
    }
}

一般情况下成员变量设置为private,成员方法设置为public,通过这个例子就可以很好的理解封装了,这里对 类 内部的实现细节进行了隐藏/封装,对 外 只提供一些公开的方法供其他用户进行访问。

【访问限定符的使用场景】:

  • 我们希望类要尽量做到 “封装”, 即隐藏内部实现细节, 只暴露出 必要 的信息给类的调用者.
  • 因此我们在使用的时候应该尽可能的使用 比较严格 的访问权限;例如如果一个方法能用 private, 就尽量不要用 public.
  • 另外, 还有一种 简单粗暴 的做法: 将所有的字段设为 private, 将所有的方法设为 public. 不过这种方式属于是对访问权限的滥用, 不过最好写代码的时候思考该类提供的字段方法到底给 “谁” 使用(是类内部自己用, 还是类的调用者使用, 还是子类使用)

三. 包

1. 包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。 有点类似于目录。比如:为了更好的管理电脑中的图片,一种好的方式就是将相同属性的图片放在相同文件下,也可以对某个文件夹下的图片进行更详细的分类 。

在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可

2. 导入包中的类

2.1 导入方法一

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

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

2.2 导入方法二

但是这种写法比较麻烦一些, 可以使用 import语句导入包

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

2.3 导入方法三

如果需要使用 java.util 中的其他类, 可以使用 import java.util.* ,这里可以导入java.util这个包中的所有类,但要注意不是一下子将所有类都导进来,在代码中用到谁就会导入谁。

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

但是更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况.

import java.util.*;
import java.sql.*;
public class Test1 {
    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 Test1 {
    public static void main(String[] args) {
        java.util.Date date = new java.util.Date();
        System.out.println(date.getTime());
    }
}

2.4 导入静态的方法和字段

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 java.lang.Math;
public class Test1 {
    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);
    }
}

3. 自定义包

3.1 基本使用规则:

  • 在文件的最上方加上一个 package 语句指定该代码在哪个包中.
  • 包名需要尽量指定成唯一的名字, 通常会用公司域名的颠倒形式(例如com.bat.demo1 ).
  • 包名要和代码路径相匹配. 例如创建 com.bat.demo1 的包, 那么会存在一个对应的路径 com/bat/demo1 来存储代码
  • 如果一个类没有 package 语句, 则该类被放到一个默认包中

3.2 IDEA中创键自定义包

在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包

在弹出的对话框中输入包名, 例如 com.bat.demo1 ,敲入回车即可

在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名回车即可.

此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了

同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句

4. 不同包中的访问权限控制

Computer类位于com.bat.demo1包中,TestComputer位置com.bat.demo2包中

package com.bat.demo1;

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

注意:如果去掉Computer类之前的public修饰符,Computer类为默认权限,只能在同一包中访问,代码也会编译失败

5. 常见的包

  • java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
  • java.lang.reflect:java 反射编程包;
  • java.net:进行网络编程开发包。
  • java.sql:进行数据库开发的支持包。
  • java.util:是java提供的工具程序包;(集合类等) 非常重要
  • java.io:I/O编程开发包。

总结

到此这篇关于Java封装实现访问限定符、包的文章就介绍到这了,更多相关Java访问限定符 包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java 中的封装介绍及使用方法

    java 中的封装介绍及使用方法 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问. 要访问该类的代码和数据,必须通过严格的接口控制. 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段. 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性. 封装的优点 1. 良好的封装能够减少耦合. 2. 类内部

  • 封装了一个Java数据库访问管理类

    复制代码 代码如下: package com.groundhog.codingmouse; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 数据库管理类 * @author CodingMouse * 2009.2.20 */ pub

  • Java基础教程之封装与接口

    总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对象可以有状态和动作,即数据成员和方法. 到现在为止,数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对象的数据成员和方法. 我们将要封装(encapsulation)对象的成员(成员包括数据成员和方法),从而只允许从外部调用部分的成员.利用封装,我们可以提高对象的易用

  • 详解JAVA的封装

    第一节 什么是JAVA中的封装 面向对象的三大特性:封装.继承.多态. 1.概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法,来实现对隐藏信息的操作和访问. 2.好处: a只能通过规定的方法访问数据 b隐藏类的实例细节,方便修改和实现 3.封装的实现步骤 修改属性的可见性,改为设为private:创建getter/setter方法,用于属性的读写,创建一个特定的方法,一般是gettersetter方法,可以在gettersetter方法中加入属性控制语句,对属性

  • Java封装的实现访问限定符、包

    目录 一. 封装 二. 访问限定符(修饰符) 三. 包 1. 包的概念 2. 导入包中的类 2.1 导入方法一 2.2 导入方法二 2.3 导入方法三 2.4 导入静态的方法和字段 3. 自定义包 3.1 基本使用规则: 3.2 IDEA中创键自定义包 4. 不同包中的访问权限控制 5. 常见的包 总结 一. 封装 封装是面向对象的三大特性之一:面向对象程序三大特性:封装.继承.多态 . 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互(简单来说

  • php中访问修饰符的知识点总结

    为什么需要访问权限? 防止覆盖变量名称和函数名称 我们下来看一下public的使用,public是可以从任何地方访问的最广泛的访问限定符. 假设A先生开发overlapFuncBase,B先生继承overlapFuncBase创建了overlapFunc的例子. <?php class overlapFuncBase { public $s = 1; } class overlapFunc extends overlapFuncBase { public $s = 2; } $obj_overl

  • Java 的访问修饰符public,protected,private(封装、继承)

    目录 一.访问控制修饰符 二.封装(Encapsulation) 三.继承(Inheritance) (1) 引出继承 (2) 继承介绍 (3) 继承细节 一.访问控制修饰符 Access level modifiers determine whether other classes can use a particular field or invoke a particular method. 访问级别修饰符决定其他类是否可以使用特定成员变量或调用特定成员方法方法. Java 中有 4 个级

  • Java中的访问修饰符详细解析

    1.类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1 )公共类修饰符 public : Java 语言中类的可访问控制符只有一个: public 即公共的.每个 Java 程序的主类都必须是 public 类作为公共工具供其它类和程序使用的应定义为 public 类. 2 )抽象类修饰符 abstract :凡是用 abstract 修饰符修饰的类,被称为抽象类.所谓抽象类

  • 深度理解Java访问修饰符

    一.作用及种类 UML类图 建模语言或标准建模语言 类的属性.操作中的可见性使用+.#.-分别表示public.protected.private 作用:信息隐藏 防止用户意外修改数据,使模块易于维护和使用有哪些修饰符呢? private:只有该类可以访问 protected:该类及其子类的成员可以访问,同一个包中的类也可以访问 public:该类或非该类可以访问 默认:同一个包中的类可以访问 可以作用于类,成员,方法 二.深度理解 同一个类 就是同一个类里面的,类相当于结构体 同一个包 圈中的

  • Java正确使用访问修饰符的姿势

    目录 1.简介 2.访问修饰符 3.原则 总结 1.简介 访问修饰符是Java语法中很基础的一部分,但是能正确的使用Java访问修饰符的程序员只在少数.在Java组件开发中,如果能够恰到好处的使用访问修饰符,就能很好的隐藏组件内部数据和不必公布的实现细节,从而把组件API和实现细节隔离:正确的使用访问修饰符开发的Java组件,在组件与组件的调用和依赖过程中,也能很好的解耦程序,以至于整个组件能够持续开发.持续测试.持续更新. 小捌温馨总结: 通过限制访问范围达到信息隐藏或封装的效果,保证程序实现

  • 浅谈Java中各种修饰符与访问修饰符的说明

    JAVA中的类只能是public 或者package的.这是符合逻辑的:人们定义类的初衷就是为了让别人用的.倘若是private,别人怎么调用?但是有一个内部类可以被定义为private.严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者.特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面.就算要露面,也要在主人(class)的同意下,向导(Interface)的引导下,才敢战战兢兢的走出来.下面是常规的一些类的修饰符和访问修饰符

  • Java的访问修饰符与变量的作用域讲解

    Java访问修饰符(访问控制符) Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments)

  • 深入分析c# 封装和访问修饰符

    封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性.抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象. C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现. 一个 访问修饰符 定义了一个类成员的范围和可见性.C# 支持的访问修饰符如下所示: public:所有对象都可以访问: private:对象本身在对象内部可以访问: protected

  • java封装及四种权限修饰符详解

    1.对属性进行封装,使用户不能直接输入数据,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值.则需要将属性声明为私有的(private). 2.我们将类的属性私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值 封装性的体现,需要权限修饰符来配合 1.Java规定的4种权限(从小到大排列):private.缺省.protected .public 2.这4种权限可以用来修饰类及类的内部结构:属性.方法.构造器.内部

随机推荐