类和对象(2)——封装(封装的概念、包、staic)

news2024/12/27 12:09:10

前言

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

一、什么是封装

1.1 概念

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

1.2 访问限定符

Java中主要通过类和访问权限来实现封装:

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

Java中提供了四种访问限定符:
在这里插入图片描述

  1. public:可以理解为一个人的外貌特征,谁都可以看得到
  2. default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
  3. private:只有自己知道,其他人都不知道
  4. 注意:
  1. protected主要是用在继承中;
  2. defaut权限指:什么都不写时的默认权限
  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属性:只能在Comput访问,不能被其他类访问
	}
}

二、包

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

2.1 概念

在Java中也引入了包,

包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式。

比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

2.2 导入包的类

Java 中已经提供了很多现成的类供我们使用. 例如Date类:可以使用

java.util.Date 导入 java.util 这个包中的 Date类

参考代码

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 和 C++ 的 #include 差别很大. C++ 必须 #include 来引入其他文件内容, 但是 Java 不需要;import 只是为了写代码的时候更方便. import 更类似于 C++ 的 namespace 和 using

参考代码

package com.bit.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.bite.demo2;
import com.bite.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修饰符,代码也会编译失败

三. static成员

3.1 staic修饰成员变量

static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。
静态成员变量的特性

  1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  3. 类变量存储在方法区当中
  4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

参考代码

public class Student{
	public String name;
	public String gender;
	public int age;
	public double score;
	public static String classRoom = "六一";
// ...
	public static void main(String[] args) {
	// 静态成员变量可以直接通过类名访问
		System.out.println(Student.classRoom);
		Student s1 = new Student("Li leilei", "男", 18, 3.8);
		Student s2 = new Student("Han MeiMei", "女", 19, 4.0);
		// 也可以通过对象访问:但是classRoom两个对象共享的
		System.out.println(s1.classRoom);
		System.out.println(s2.classRoom);
}

3.2 static修饰成员方法

在Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。

参考代码:

public class Student{

	private static String classRoom = "Bit306";

	public static String getClassRoom(){
		return classRoom;
	}
}

public class TestStudent {
	public static void main(String[] args) {
		System.out.println(Student.getClassRoom());
	}
}

静态方法特性

  1. 不属于某个具体的对象,是类方法
  2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  3. 不能在静态方法中访问任何非静态成员变量
  4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用;

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

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

相关文章

【码农圈子】想加免费的程序员微信群的看过来

群名:码农圈子 很多人后台反应,最近有没有免费的微信技术交流社群 。今天特意写一篇文章来创建一些只有程序猿的微信群。(广告党慎入!) 这些微信技术群都是完全免费,后续也不会收取任何费用 。 群规则 …

Paragon NTFS如何手动更新? Paragon NTFS格式化硬盘会损失数据吗?

Paragon NTFS for Mac常被用于实现在Mac上读写NTFS格式硬盘,然而,有时用户可能会遇到软件无法自动更新的情况,需要进行手动更新操作。下面我们来看看Paragon NTFS如何手动更新,Paragon NTFS格式化硬盘会损失数据吗的相关内容。 一…

Python 使用 pip 安装 matplotlib 模块(精华版)

pip 安装 matplotlib 模块 1.使用pip安装matplotlib(五步实现):2.使用下载的matplotlib画图: 1.使用pip安装matplotlib(五步实现): 长话短说:本人下载 matplotlib 花了大概三个半小时屡屡碰壁,险些暴走。为了不让新来的小伙伴走我的弯路,特意…

【matlab 代码的python复现】 Matlab实现的滤波器设计实现与Python 的库函数相同实现Scipy

实现一个IIR滤波器的设计 背景 Matlab 设计的滤波器通常封装过于完整,虽然在DSP中能够实现更多功能的滤波器设计但是很难实现Python端口的实现。 我们以一段原始的生物电信号EEG信号进行处理。 EEG信号 1.信号获取 EEG信号通常通过头皮电极,经过多通道采样芯片采样,将获…

mysql面试题八(SQL语句)

目录 1.SQL 基本组成部分 常用操作示例 创建表 插入数据 查询数据 更新数据 删除数据 创建索引 授予用户权限 2.常见的聚合查询 1. 计数(COUNT) 2. 求和(SUM) 3. 平均值(AVG) 4. 最大值&…

使用FPGA实现超前进位加法器

介绍 前面已经向大家介绍过8位逐位进位加法器了,今天向大家介绍4位超前进位加法器。 对于逐位进位加法器来说,计算任意一位的加法运算时,必须等到低位的加法运算结束送来进位才能运行。这种加法器结构简单,但是运算慢。 对于超…

WSL安装-问题解决

WslRegisterDistribution failed with error: 0x8004032d WslRegisterDistribution failed with error: 0x80080005 Error: 0x80080005 ??????? 解决: 1、 winr输入:optionalfeatures.exe 2、打开这两项

钉钉报警的优势在哪里?如何配置钉钉机器人进行报警信息推送?

一、常见的报警方式 1、短信或者电话报警 这样的报警方式更适合高级别的报警提醒,用于处理紧急情况。出现级别不高而又频繁地发送短信会让人产生排斥感,而且电话或者短信的报警方式也存在一定的成本。 2、邮件报警 邮件报警更适用于工作时的提醒&…

支付方式模块代码示例

支付方式模块代码示例 效果展示 <view class"card"><uni-title type"h3" title"支付方式"></uni-title><radio-group change"radioChange"><label class"radio"><view class"zf-t…

ThingsBoard通过规则链使用邮件发送报警信息

1、描述 2、通过规则链路配置发送邮件只需 两步 3、案例 1、基础链路 2、选择变换节点里面的To Email 3、 编辑节点to email 4、 将创建告警与to email链接 5、选择外部节点中的send email 6、配置邮箱相关信息&#xff0c;如过不知道密钥如何获取的&#xff0c;请查看下…

yolo-驾驶行为监测:驾驶分心检测-抽烟打电话检测

在现代交通环境中&#xff0c;随着汽车技术的不断进步和智能驾驶辅助系统的普及&#xff0c;驾驶安全成为了公众关注的焦点之一 。 分心驾驶&#xff0c;尤其是抽烟、打电话等行为&#xff0c;是导致交通事故频发的重要因素。为了解决这一问题&#xff0c;研究人员和工程师们…

JRT质控数据录入

之前有时间做了质控物维护界面&#xff0c;有了维护之后就应该提供可以录入业务数据的功能了&#xff0c;当时给质控物预留了一个“项目批次业务数据”的功能说是业务数据会给每天拷贝维护数据。这次一起补上&#xff0c;展示JRT怎么写质控数据录入的界面。 界面如下&#xff…

【Linux基础】Linux基础概念

目录 前言 浅谈什么是文件&#xff1f; Linux下目录结构的认识及路径 目录结构 路径 家目录 什么是递归式的删除 重定向 输出重定向&#xff1a; 追加重定向&#xff1a; 输入重定向&#xff1a; 命令行管道 shell外壳 为什么需要shell外壳&#xff1f; shell外壳…

智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法

智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法 目录 智能算法 | Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法效果一览基本介绍程序设计参考资料效果一览 基本介绍 Matlab基于CBES融合自适应惯性权重和柯西变异的秃鹰搜索算法 融合自适应…

Linux下SPI设备驱动实验:使用内核提供的读写SPI设备中的数据的函数

一. 简介 前面文章的学习&#xff0c;已经实现了 读写SPI设备中数据的功能。文章如下&#xff1a; Linux下SPI设备驱动实验&#xff1a;验证读写SPI设备中数据的函数功能-CSDN博客 本文来使用内核提供的读写SPI设备中的数据的API函数&#xff0c;来实现读写SPI设备中数据。 …

【竞技宝】中超:国安本轮4比1大胜,张稀哲表现不俗

国安在本轮中超主场跟青岛西海岸相遇,这场比赛球队进攻多点开花,最终以4比1将对手斩落马下,拿到了久违的大胜。其中,张稀哲、李可、王子铭都在比赛中有不俗表现。首先,张稀哲身为国安中场核心,他在比赛中传出了多脚有威胁的球,并且成功帮助队友得分。张稀哲在国安神兵天降的表现…

C# 6.0+JavaScript云LIS系统源码 云LIS实验室信息管理新型解决方案

C# 6.0JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案 什么是医院云LIS系统&#xff1f; 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检验数据进行集中管…

爱普生RX-8130CE内置电池控制 RTC

特点&#xff1a;(1)封装极小&#xff0c;集成度高RX-8130CE是一个带|2C接口的实时时钟模块&#xff0c;内部集成32.768KHz晶体振荡器。实时时钟功能不仅集成了年、月、日、星期、小时、分、秒的日历和时钟计数器&#xff0c;同时也有时间闹钟、间隔定时器、时间更新中断等功能…

关于ResNet的假说

ResNet 最核心的思想就是 恒等映射吧 那么现在来提出几个问题&#xff1a; 为什么deeper 以后train L 会增加&#xff1f;恒等映射会解决什么问题&#xff1f;能否解决梯度非常陡峭的问题&#xff1f;你想到了什么模型有类似的问题&#xff0c;如何进行改进的&#xff1f; as…

JAVA学习笔记29(集合)

1.集合 ​ *集合分为&#xff1a;单列集合、双列集合 ​ *Collection 接口有两个重要子接口 List Set&#xff0c;实现子类为单列集合 ​ *Map接口实现子类为双列集合&#xff0c;存放的King–Value ​ *集合体系图 1.1 Collection接口 1.接口实现类特点 1.collection实现…