9.Java面向对象----封装

news2024/11/9 3:56:34

Java面向对象—封装

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
面向对象的三大核心特性:

  • 封装性
  • 继承性
  • 多态性

今天我们重点来讲解Java面向对象的第一个特性:封装性。

一、package和import语句

所谓的封装,其实很好理解,就是将代码通过包装的方式存放起来。既然是通过包装的方式,那么我们可以理解为将代码存放在一个容器当中,这个容器,我们称之为包。

1、package关键字:是用来定义包的。

示例代码:

package com.admin.bean;

代码解析:

Java通过package关键字定义了包,根据不同层级的延伸,编译工具会自动为项目创建相应层级的包。就好像我们在电脑中的某个盘符下创建的文件夹。根据示例代码,也就是我们这个类存放在项目目录下的com–admin–bean文件夹下。如果代码中没有出现package关键字,则证明该类存储于项目的src根目录下,包为默认包。

2、import关键字:是用来引用包的,我们的类或者Java的开发类,都存放在不同包下,当我们要是用这个类时,就需要将这个类引入,使用import关键字进行引用。同包下的类不需要引用,就可以直接使用。
示例代码:

import java.util.*;

代码解析:
Java通过import关键字,将java包下的util包下的所有类都进行了引用。

3、Java常用包

  • Java.lang:包含一些Java语言的核心类,如:String、Math、Integer、System和Thread,提供常用功能
  • java.awt:包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
  • java.net:包含执行与网络相关的操作类
  • java.io:包含能提供多种输入/输出功能的类
  • java.util:包含一些使用工具类,如:使用与日期相关的函数等

总结:在Java语言中,所有引用于其他包下的类,都需要用import引用,只有java.lang包作为核心类不需要引用可直接使用。

二、封装

1、封装的定义

封装是 Java 面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内部结构。也就是说,如果我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了。

2、封装的作用

封装迫使用户通过方法访问数据能保护对象的数据不被误修改,还能使对象的重用变得更简单。数据隐藏通常指的就是封装。它将对象的外部界面与对象的实现区分开来,隐藏实现细节。迫使用户去使用外部对象,即使实现细节改变,还可通过对象承担其功能而保留原样,确保调用它的代码还继续工作。封装使代码维护更简单。

3、封装的特点

  • 把类的属性隐藏,提供公共方法对其访问
  • 提高了代码的复用性
  • 提高了代码的安全性

4、封装的方式

  • 私有化成员变量
  • 私有化成员变量,使用private关键字修饰。

代码示例:

public class Admin {

	private String name;
	
	private int age;
	
	private String phone;
	
	private String password;

}

  • 设置构造方法(函数)
  • 为类创建构造方法(函数),构造方法用来实例化类对象

代码示例:

public class Admin {

	private String name;
	
	private int age;
	
	private String phone;
	
	private String password;

	public Admin() {
		
	}
	
	public Admin(String name,int age,String phone,String password) {
		this.name=name;
		this.age=age;
		this.phone=phone;
		this.password=password;
	}
}

  • 设置成员变量的公共方法进行访问

为每个成员变量(类的属性)创建get()和set()方法,get()方法表示获取属性,set()方法表示为属性赋值。

package com.admin.bean;

public class Admin {

	private String name;
	
	private int age;
	
	private String phone;
	
	private String password;

	public Admin() {
		
	}
	
	public Admin(String name,int age,String phone,String password) {
		this.name=name;
		this.age=age;
		this.phone=phone;
		this.password=password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

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

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
}

  • 使用this关键字引用

使用this关键字,指向本类属性,用来与形式参数区分。

package com.admin.bean;

public class Admin {

	private String name;
	
	private int age;
	
	private String phone;
	
	private String password;

	public Admin() {
		
	}
	
	public Admin(String name,int age,String phone,String password) {
		this.name=name;
		this.age=age;
		this.phone=phone;
		this.password=password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

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

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
}

附录:Java的访问修饰符
访问修饰符是用来控制类、属性、方法被访问的权限的。访问修饰符巧妙的实现了Java面向对象的访问权限。
在这里插入图片描述
private:
1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。
2.在当前类之外,使用对象(或是类名,针对静态的)打点调用都是被限制的。这时候有同学问,那我开发的这个私有的成员难道不能使用了吗?不是,可以通过在当前类中开发一个公有的方法,在公有方法中可以使用这个私有的成员,从而达到间接使用私有成员。
3.在继承中,私有成员禁止被继承,也就是说在子类的开发中,拒绝直接使用私有成员的名字进行使用。
public:
1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。
2.在当前类之外,使用对象(或是类名,针对静态的)打点调用是被允许的。
3.在子类中,公有成员允许被继承,也就是说在子类的开发中,可以直接使用公有成员的名字进行使用。
protected:
protected这个修饰符比较繁琐,它涉及到是否是同一个包的问题。
同一个包的情况:
1.在当前类开发中,main方法之外可以直接借助名字使用,当前类的main方法中可以使用对象打点的方式直接使用成员。
2.在当前类之外,同一个包中,使用对象(或是类名,针对静态的)打点调用是被允许的。
3.在子类中,同一个包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中可以使用子类或是父类对象打点调用。
4.在当前类之外,子类之外,要使用子类的类中,同一个包中,可以使用子类或是父类对象打点调用。
不同包的情况:
1.在当前类之外,不同包中,使用对象(或是类名,针对静态的)打点调用是被禁止的。
2.在子类中,不同包中,受保护成员允许被继承,也就是说在子类的开发中,可以直接使用受保护成员的名字进行使用。子类的main方法中只能通过子类对象打点调用。父类对象不行,这个时候相当于父类中的受保护成员跨包了。
3.在当前类之外,子类之外,要使用子类的类中,与子类同一个包中,通过子类对象打点是调用不出父类中的受保护的成员的。父类对象更不行,这个时候相当于父类中的受保护成员跨包了。如果想要通过子类对象调用父类的受保护的成员,需要重新覆写父类的这个成员。
4.在当前类之外,子类之外,要使用子类的类中,与父类同一个包中,通过子类对象打点是可以调用父类中的受保护的成员的。父类对象也行,同个包中。
5.在与父类和子类都不同包的第三个包中,要想通过子类对象调用父类的受保护成员,可以通过覆写父类受保护成员,并将访问限制符修改成public。

总结:private只能自己访问,public所有人都可以访问,protected只能在父子类中访问

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

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

相关文章

Python 小型项目大全 26~30

二十六、斐波那契 原文:http://inventwithpython.com/bigbookpython/project26.html 斐波那契数列是一个著名的数学模式,被认为是 13 世纪意大利数学家斐波那契的杰作(尽管其他人发现它的时间更早)。序列从 0 和 1 开始&#xff0…

SAR ADC系列16:CDAC上机实践+作业

目录 作业和上机实践: 通过仿真确定桥接电容Ca的尺寸 采样技术和CDAC相结合 电容校正 为什么在100...0和011...1之间最差:电容的瓶颈在MSB上面 为什么INL最差也发生在中间Code 其他问题 频谱混叠 上级板采样网络时序问题 共模相关问题 关于V…

数据库----------约束、主键约束

目录 1.简介 1.概念 2.作用 3.分类 2.主键约束 1.概念 2.操作 1.添加单列主键 2.添加多列联合主键 3. 通过修改表结构添加主键 4.删除主键 1.简介 1.概念 约束英文: constraint 约束实际上就是表中数据的限制条件 2.作用 表在设计的时候加入约束的目的就是为了…

系统无损迁移、硬盘系统复制完整教程(常用于升级更大硬盘的场景)

阿酷TONY / 2023-4-15 / 长沙 这个教程的应用背景或场景是这样的: 原本使用的ThinkPad笔记本电脑是250G的SSD固态硬盘,使用了一两年后,空间不足了,这个时候需要换一块500G或更大的SSD硬盘,那么问题来了,通…

人员跌倒识别检测系统 yolov7

人员跌倒识别检测系统通过PythonYOLO7网络模型算法,人员跌倒识别检测算法模型对现场画面中有人员倒地摔倒行为实时分析预警,发现则立即抓拍存档告警同步提醒后台值班人员及时处理。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研究团队…

(十二)排序算法-插入排序

1 基本介绍 1.1 概述 插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,…

Flink处理大型离线任务稳定性与性能调优探索

Apache Flink作为分布式处理引擎,用于对无界和有界数据流进行状态计算。其中实时任务用于处理无界数据流,离线任务用于处理有界数据。通过本文你将掌握让大型离线任务运行稳定的能力,同时能够通过分析离线任务运行特点,降低任务运…

150.网络安全渗透测试—[Cobalt Strike系列]—[DNS Beacon原理/实战测试]

我认为,无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感!!! 文章目录一、DNS Beacon原理1、DNS Beacon简介2、DSN Beacon工作原理二、DNS Beacon实战测试1、实战测试前提2、实战测试过程一、DNS Beacon原理 1、…

大数据分析工具Power BI(三):导入数据操作介绍

导入数据操作介绍进入PowBI,弹出的如下页面也可以直接关闭,在Power BI中想要导入数据需要通过Power Query 编辑器,Power Query 主要用来清洗和整理数据。文件资料下载:https://download.csdn.net/download/xiaoweite1/87587711一、…

Wijmo JavaScript UI 5.20222.877 Crack

Wijmo使用更快、更灵活的 JavaScript UI 组件构建更好的应用程序 使用 Wijmo,利用我们引人注目的 UI 组件库,将更多时间花在应用程序的核心功能上。要求零依赖,Wijmo sports弹性网格,业内最好的 JavaScript 数据网格,提…

JVM性能调优方法和模板

每天 100 万次登陆请求,8G 内存该如何设置 JVM 参数,大概可以分为以下 8 个步骤 。 第一步、新系统上线如何规划容量? 1. 套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和 JVM 的内存参数,这个容量与资源规划并不…

关于 AI ,大家关心的问题

阅读本文大概需要 1.46 分钟。兄弟们,自从我跟曹老师准备合伙做一个 AI 生态的新社群之后,很多人问我最多的问题就是:AI 时代对我们普通人来说意味着什么?普通人又该如何去把握 AI 时代的机会?那么,今天&am…

nodejs+vue家庭菜谱食谱管理系统

目 录 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 1 1.1开发背景 1 1.2开发意义 1 1.3研究内容 1 第2章 主要技术和工具介绍 5 第3章 系统分析 4 3.1可行性分析 4 3.1.1经济可行性 4 3.1.2技术可行性 4 3.1.3操作可行性 4 3.2需求分…

【云原生】k8s Ingress 实现流量路由规则控制

文章目录前言什么是 IngressIngress 的定义格式Ingress 的类型有哪几种?1. Simple fanout2. Name-based virtual hosting3. Path-based routing该如何实现更新 IngressIngress ControllerIngress Class总结前言 在 Kubernetes 中,Ingress 是一个非常重要…

【数据结构与算法分析inC-MarkAllen】1-数学基础

文章目录1. 第一章1.1 进行算法分析目的1.1.1 适应大量数据情况从 NNN 个数中选择第 kkk 大的数递减排序,取第K大的数插入排序思想1.1.2 边界条件正确1.2 数学知识复习1.2.1 指数1.2.2 对数1.2.3 级数几何级数算术级数1.2.4 模运算性质1.2.5 证明方法归纳法斐波那契…

CRM系统和ERP管理系统二者有何区别?

我们常提到的企业管理系统有CRM系统和ERP管理系统,那么二者有何区别呢? 一、目的。 CRM客户关系管理系统主要的目的是已客户关系的建立、发展以及维护。ERP系统主要强调的业务目的是未来提高整个业务的生产力。 二、重点。 …

回顾|伍鸣博士出席《华人之光-世界瞩目的华人 Web3 项目》圆桌论坛

*本文节选自Foresight News《华人之光——世界瞩目的华人 Web3 项目》的圆桌论坛由 Foresight Ventures 与 Foresight News 联合主办的「FORESIGHT 2023 」年度峰会上,在《华人之光——世界瞩目的华人 Web3 项目》的圆桌论坛中,Conflux Co-Founder 伍鸣、…

LiveData数据倒灌?你真的用对了吗?源码解析

文章目录livedata/lifecycleandroidx-lifecycle基本使用uml-关键角色关系观察者模式关键源码分析livedata基本使用源码分析还是从observe开始livedata变化通知观察者viewmodel源码分析FAQlifecycle用到的设计模式lifecycle是如何监听aty生命周期的一些废弃和原因为什么废弃注解…

理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。…

【华为机试真题详解JAVA实现】—配置文件恢复

目录 一、题目描述 二、解题代码 一、题目描述 有6条配置命令,它们执行的结果分别是: 命 令执 行resetreset whatreset boardboard faultboard addwhere to add<