类的封装和包(JAVA)

封装

所有的OOP语言都会有三个特征:

  1. 封装;
  2. 继承;
  3. 多态。

本篇文章会为大家带来有关封装的知识。

在我们日常生活中可以看到电视就只有那么几个按键(开关,菜单……)和一些接口,而而我们通过这些东西就可以实现我们的需求,并不用深究它的构造。而它内部的一些构造(CPU,……)厂家都会用一个外壳来吧它们封装起来不让我们直接看到里面的东西。

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

那么问题来了我们知道我们在类外可以使用‘.’操作符来访问它的内部属性,那它应该如何隐藏属性和实现细节呢?

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

范围private

       默认的

(什么都不写)

protectedpublic
同一包中的同一类可以可以可以可以
同一包中的不同类可以可以可以
不同包中的子类可以可以
不同包中的非子类可以
  • public:可以理解为一个人的外貌特征,谁都可以看得到;
  • private:只有自己知道,其他人都不知道 

此时我们就可以通过访问限定符来限制类中的成员不被外界所访问。

从表格中可以看出它们的范围都是包和类,那么类我们知道是什么,那包是个什么东西呢?暂时可以不用管文章后边有介绍。

在同一个包中:

此时你可以不用管包是什么,因为我们在学习阶段平时都是在同一个包中进行代码的编写。

 

此时我们可以看到虽然类当中有name属性可是由于它的权限是private所以当我们在类的外部进行访问时系统就会报错。而age的权限是默认的可以被同一个包中的不同类进行访问。 

那么如果我们想对name进行修改应该怎么办?因为它被private所修饰只能被类中的成员所访问,所以此时我们就可以写一个修改name的方法或者也是最简单粗暴的方法直接将private进行修改。

class Student{private String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class Main {public static void main(String[] args) {Student a = new Student();a.setName("zhangsan");System.out.println(a.getName());System.out.println(a.age);}
}

包的概念:

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

注:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
其实包你可以简单理解为文件夹

 在JAVA中你可以通过import语句导入包中的类。

没错我们平时再输入输出时在代码第一行写的和C语言头文件相似的语句其实就是在导入包中的类。比如:

import java.util.Scanner;

自定义包

自定义包的基本规则: 

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

首先我们如何创建一个包:

在IDEA中创建包的过程如下,先右击src然后鼠标放在new然后点击package;

然后在你创建的包上右击创建一个类:

 此时你就可以看见IDEA在该路径下创建了一个文件:

而此时我们可以看见创建的类上面多了一个语句

而我们之前是系统默认的包所以没有。

在不同包中:

 此时因为两个类没有构成父子关系所以只有sex没有报错。

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

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

相关文章

【计算机视觉|人脸建模】SOFA:基于风格、由单一示例的2D关键点驱动的3D面部动画

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks 链接:SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks | Proceedings of …

jmeter压力测试指标解释

目录 RT(response time) Throughput 吞吐量 并发用户数 QPS (query per seconds) TPS (transition per seconds) PV和UV 聚合报告: RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能…

什么是云原生和 CNCF?

一、CNCF简介 CNCF:全称Cloud Native Computing Foundation(云原生计算基金会),成立于 2015 年 12 月 11 日,是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续…

Klipper seria.c 文件代码分析

一. 前言 Klipper 底层硬件的串口模块程序写的是否正确是决定下位机与上位机能否正常通信的前提,如果这个文件的驱动没写好,那上位机控制下位机就无从谈起,更无法通过上位机去验证下位机程序的正确性。 本篇博文将详细解析 Klipper src 文件夹…

809协议

809协议 目录概述需求: 设计思路实现思路分析1.809协议数据流——链路管理类 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,…

在idea中添加try/catch的快捷键

在idea中添加try/catch的快捷键 在idea中添加try/catch的快捷键 ctrlaltt 选中想被try/catch包围的语句,同时按下ctrlaltt, 出现下图 选择try/catch即可。

Elasticsearch搜索引擎系统入门

目录 【认识Elasticsearch】 Elasticsearch主要应用场景 Elasticsearch的版本与升级 【Elastic Stack全家桶】 Logstash Kibana Beats Elasticsearch在日志场景的应用 Elasticsearch与数据库的集成 【安装Elasticsearch】 安装插件 安装Kibana 安装Logstash 【认…

C# 2的幂

231 2的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:n 1 输出&a…

【图论】三种中心性 —— 特征向量、katz 和 PageRank

维基百科:在图论和网络分析中,中心性指标为图中相应网络位置的节点分配排名或数值。中心性这一概念最初起源于社交网络分析,因此很多衡量中心性的术语也反映了其社会学背景。 不同中心性指标对 “重要” 的衡量方式不同,因此适用于…

惊喜!1行Python代码,瞬间测你工作量,分享一个统计代码行数的神器

大家好,这里是程序员晚枫。 **你想不想知道一个项目中,自己写了多少行代码?**我用今天的工具统计了一下开源项目:python-office的代码行数,竟然有21w行! 我们一起看一下怎么用最简单的方法,统…

mac下安装vue cli脚手架并搭建一个简易项目

目录 1、确定本电脑下node和npm版本是否为项目所需版本。 2、下载vue脚手架 3、创建项目 1、下载node。 如果有node,打开终端,输入node -v和npm -v , 确保node和npm的版本,(这里可以根据自己的需求去选择,如果对最新版本的内容有…

IO进程线程day3(2023.7.31)

一、Xmind整理&#xff1a; 文件描述符概念&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;用fread和fwrite实现文件拷贝 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <head.h> int main(int argc, const char…

什么叫前后端分离?为什么需要前后端问题?解决了什么问题?

单体架构出现的问题 引出&#xff1a;来看一个单体项目架构的结构 通过上述可以看到单体架构主要存在以下几点问题&#xff1a; 开发人员同时负责前端和后端代码开发&#xff0c;分工不明确开发效率低前后端代码混合在一个工程中&#xff0c;不便于管理对开发人员要求高(既会前…

千元内合板和单板吉他怎么选?SAGA萨伽SF600和VEAZEN费森CLR300怎么样?哪一款更适合初学者入门使用!【吉他评测】

对于预算不多的朋友&#xff0c;在选购前翻阅查询很多资料&#xff0c;吉他材质、桶型和尺寸等等疑问&#xff0c;不知道怎么选&#xff0c;无从下手&#xff0c;还容易遇到烧火棍&#xff0c;在这里介绍这两款VEAZEN费森CLR300&#xff08;单板&#xff09;和SAGA萨伽SF600&am…

vuejs源码阅读之代码生成器

代码生成器是模版编译的最后以后&#xff0c;它的作用是将AST转换成渲染函数中的内容&#xff0c;这个内容可以称为代码字符串。 代码字符串可以被包装在函数中执行&#xff0c;这个函数就是我们通常说的渲染函数。 渲染函数被执行之后&#xff0c;可以生成一份VNode&#xf…

分治法 Divide and Conquer

1.分治法 分治法&#xff08;Divide and Conquer&#xff09;是一种常见的算法设计思想&#xff0c;它将一个大问题分解成若干个子问题&#xff0c;递归地解决每个子问题&#xff0c;最后将子问题的解合并起来得到整个问题的解。分治法通常包含三个步骤&#xff1a; 1. Divid…

【Python系列】Python基础语法轻松入门—从变量到循环

目录 写在前面 语法介绍 变量 数据类型 整数 浮点数 字符串 列表 元组 字典 运算符 算术运算符 比较运算符 逻辑运算符 条件语句 循环语句 图书推荐 图书介绍 参与方式 中奖名单 写在前面 Python 是一种高级、解释型的编程语言&#xff0c;具有简单易学…

华为数通HCIP-IGMP(网络组管理协议)

IGMP&#xff08;网络组管理协议&#xff09; 作用&#xff1a;维护、管理最后一跳路由器以及组播接收者之间的关系&#xff1b; 应用&#xff1a;最后一跳路由器以及组播接收者之间&#xff1b; 原理&#xff1a;当组播接收者需要接收某个组别的流量时&#xff0c;会向最后…

Yolov8新版本解读:优化点如何加入新版本,通过加入EMA注意力进行对比说明

本文目的: 最近yolov8进行了一次较大的更新,对一些优化点加在哪个位置上有些变动,因此本文主要通过具体案列进行对比和说明,以便在新版本上能够轻松上手。 老版本 ultralytics/nn 新版本更新为: modules文件夹下内容如下: 解读: 将modules.py拆分为 1.__init__.…

7.31--Day01实战单体项目苍穹外卖

总结 今天回来在高铁上构想了一下&#xff0c;感觉大二有很多的事情要做&#xff0c;这个暑假还有一个月不能浪费了&#xff0c;回来最重要的事情就是看病了&#xff0c;身体一定要调养好了&#xff0c;大二的规划&#xff0c;大二上继续做省大创&#xff0c;需要做的有软件开…