Java_封装

news2025/1/17 3:39:10

目录

1.访问修饰限定符

2.封装扩展之包

导入包中的类

3.自定义包

4.包的访问权限控制举例 

5.常见的包

6.通过构造方法进行初始化

面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说,就是套壳屏蔽细节。

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

1.访问修饰限定符

比如:

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

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了。

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

【说明】 

1)protected主要是用在继承中;

2)default权限指:什么都不写时的默认权限;

3)访问权限除了可以限定类中成员的可见性,也可以控制类的可见性。

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

2.封装扩展之包

包的概念:在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包。有点类似于目录。在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

导入包中的类

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;
//import java.util.*
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.*;
        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());
    }
}

3.自定义包

基本规则

1.在文件的最上方加上一个 package 语句指定该代码在哪个包中.

2.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).

3.包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径com/bit/demo1 来存储代码.

4.如果一个类没有 package 语句, 则该类被放到一个默认包中.

操作步骤:

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

 2. 在弹出的对话框中输入包名, 例如 com.baidu.www

 可以把这个勾去掉;

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

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

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

4.包的访问权限控制举例 

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

package com.baidu.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("上网~~~");
    }
}
///
package com.baidu.demo2;
import com.baidu.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修饰符,代码也会编译失败

5.常见的包

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编程开发包。

6.通过构造方法进行初始化

class Person {
    private String name;
    private int age;
    //被private修饰,只能在当前类使用!!!
    private void eat() {
        System.out.println("吃饭!");
    }
    public void show() {
        System.out.println(name + " " + age);
    }
}
public class test {
    public static void main(String[] args) {
        Person person = new Person();

    }
}

因为name和age只能在当前类的使用,故可以通过构造方法对其进行初始化!

class Person {
    private String name;
    private int age;
    //被private修饰,只能在当前类使用!!!

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;//通过这个方法进行修改
    }
    private void eat() {
        System.out.println("吃饭!");
    }
    public void show() {
        System.out.println(name + " " + age);
    }
}
public class test {
    public static void main(String[] args) {
        Person person = new Person("zhangsan",11);
        person.show();
        //如果要修改名字,因为name是private修饰的,所以不能在类test直接修改
        //所以需要提供其他方法进行修改
        person.setName("lisi");
        person.show();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RPC初识

一、为什么要学习RPC 要回答这个问题,那就必须先了解下 RPC 的使用场景。 只要涉及到网络通信,我们就可能用到RPC 大型分布式系统中:消息队列、分布式缓存、分布式数据库、统一配置中心等,应用程序与这些依赖的中间件都可以通过 …

【Java】SpringCloud基础知识点

SpringCloud什么是SpringCloud有哪些组件EurekaRibbonHystrixZuulConfigFeign什么是SpringCloud SpringCloud是一套分布式微服务的解决方案,Spring Cloud 的各个项目基于 Spring Boot,将 Netflix 的多个框架进行封装,并且通过自动配置的方式…

数据的标准化处理——基于python

数据的标准化处理——基于R归一化(normalization)python实现标准化python实现之前写过用R来进行标准化: 数据的标准化处理——基于R归一化(normalization) 将数据缩放到[0,1]的(min—max Normalization&am…

电脑软件:推荐八款图片处理工具,值得收藏

目录 1、Inpaint 图片去水印神器 2、XnView 图片批量管理工具 3、TinyPNG图片压缩网站 4、IrfanView 5、GIMP 开源图片编辑器 6、Paint.NET 好用的图片编辑软件 7、Optimizilla 图片压缩工具 8、iLoveIMG 在线图片编辑工具 日常办公当中,图片处理是经常要用…

.ttf 字体剔除

想在 游戏/应用 中使用字体,让你的应用提升一个逼格;但是发现一个 .ttf 少则 几兆, 大则 十几兆,这时候可以通过 fontTools,来剔除不需要的畸形字体,保留常用字体; 1. 安装 python 环境 自行安装&#xff…

【JavaSE】类和对象 【this引用和构造方法】(二)

目录 1、this引用 1.1、this的三种用法 1.1.1、this.属性名 1.1.2、this.方法名 1.1.3、this ( ) 访问构造方法 详细讲解 1、this引用 1.1、为什么要有this引用 问题1:形参名不小心与成员变量名形同会发生什么问题? 问题2: 1.2、什…

《前端》css总结(上)

前言: css的定义有很多很多,大家不会的就去这个网站现查一下就好:https://developer.mozilla.org/zh-CN/docs/Web/CSS/text-decoration 文章目录样式定义方式行内样式表(inline style sheet)内部样式表(in…

计算机毕业设计Python+Django的学生作业管理系统

项目介绍 在各学校的教学过程中,学生的作业管理是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“基于网络的教学平台”的研究和设计也成为教育技术领域的热点…

接口高可用

架构决定系统质量上限,代码决定系统质量下限 接口高可用整体框架 雪崩效应:请求量超过系统处理能力后导致系统性能螺旋快速下降 链式效应:某个故障引起后续一连串的故障 限流 用户请求全流程各个环节都可以限流: 请求端限流&a…

区块链溯源相比传统追溯有什么优点?

区块链溯源:通过使用区块链和物联网技术的结合,记录产品的物流信息,并基于区块链不可篡改的特性把商品的物流信息、质量信息、质检信息等相关商品信息全部记录在上。从而实现了产品全过程的质检、物流、管理等,解决了信息缺乏透明…

01_网络概述

知识点1【分组交换】 知识点2【交换方式】存储-转发 知识点3【网络分层结构】(重要) 知识点4【协议的介绍】 1、IP协议 网际协议(网络层) 2、TCP协议 传输控制协议 (传输层)(重要&#xff…

工程建设行业智能供应链系统:优化产业链运作效率,实现全链路数字化建设

工程建设行业是对建筑工程、线路管道和设备安装工程、建筑装饰装修工程等工程项目进行新建、扩建和改建的行业,对促进国民经济发展和改善人民生活提供了重要的物质技术基础。近年来,我国城镇化的迅速推进为工程建设行业带来了广阔的市场发展空间&#xf…

低压MOS管AONS36344、AONS36348 MOSFET N-CH DFN

特点 沟槽功率MOSFET技术30V 低RDS(ON) 门票费低 高电流能力 符合RoHS和无卤标准 应用 DC/DC转换器在计算、服务器和POL中的应用 电信和工业中的隔离DC/DC转换器 产品参数 1、型号:AONS36344 低压MOS管 类型:单 - N型MOS管 VDS (V)漏极电压:…

阿里P8架构师强推java程序员人手一套116页JVM吊打面试官专属秘籍

说在前面的话 只要是java程序员,肯定对于JVM来说并不陌生,甚至是从熟悉到陌生,为什么这样说呢? 因为你看似熟悉的东西,其实对于源码层级了解得少之又少,到头来只有一种陌生的感觉,使用了吗&…

基于matlab的强化学习QLearning路径规划性能仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 假设我们的行为准则已经学习好了, 现在我们处于状态s1, 我在写作业, 我有两个行为 a1, a2, 分别是看电视和写作业, 根据我的经验, 在这种 s1 状态下, a2 写作业 带来的潜在奖励要比 a1 看…

LeetCode | 一探环形链表的奥秘【快慢双指针妙解BAT等大厂经典算法题】

前言 本文总结了力扣141.环形链表|以及142.环形链表||这两道有关环形链表的求解方案,去求证链表是否带环已经如何找出入环口的结点。 有关环形链表,在BAT等大厂面试中均有出现,一般是属于中等难度的题,需掌握 环形链表| &&…

教你vue-router命令视图应该怎么玩

引言 在VUE实战项目开发中,为了减少代码冗余,便于后期维护,我们经常会把相同布局的代码封装为公共组件,例如移动开发中NavBar导航栏、Tabbar标签栏等公共组件,需要使用时导入、注册、调用即可,但是相对NavB…

JSRPC的三种实现方式

RPC 为远程过程调用,本文通过在浏览器端(服务端)开启一个WebSocket服务,接收命令,执行浏览器网页的加密代码,得到密文。 CMD端(客户端)也开启一个WebSocket服务与浏览器端交互&#…

【Spring Boot】Day03

文章目录一、Value和ConfigurationProperties的区别二、PropertySource一、Value和ConfigurationProperties的区别 区别: 数据校验:判断数据是否合法 Value: 不支持数据校验ConfigurationProperties:支持数据校验 开启数据校验功能&#xf…

软考证书可积分落户、评职称、抵扣个税等,快来考一个吧!

很多人想要在工作的城市落户、买房、生活、小孩上学,但由于对于城市落户政策不了解,担心自己条件不够!今天给大家介绍一本软考证书帮你解决落户等问题。 软考,是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试;既…