面向对象编程主线三

news2024/11/16 3:15:51

面向对象编程

三、第三阶段

高内聚:类的内部数据操作细节自己完成,不允许外部干涉;

低耦合:仅对外暴露少量的方法用于使用。

封装性的设计思想:把该隐藏的隐藏起来,该暴露的暴露出来。

3.1、面向对象的特征一:封装与隐藏

3.1.1、问题的引入

当我们创建一个类的对象以后, 我们可以通过"对象.属性"的方式,对对象的属性进行赋值。这里,赋值操作要受属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋
加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。(比如:set)
同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的( private )
---->此时,针对于属性就体现了封装性。

3.1.2、封装性的体现

我们将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)

public class Customer {
    //属性
    private int id;
    private String name;
    //构造器
    public Customer(){

    }
    //方法 name
    public void setName(String n){
        name = n;
    }

    public String getName(){
        return name;
    }
    //方法 name
    public void setId(int i){
        id = i;
    }

    public int getId(){
        return id;
    }
}

拓展:封装性的体现:

① 将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)

② 不对外暴露的私有的方法

③ 单例模式(将构造器私有化)

④ 如果不希望类在包外被调用,可以将类设置为缺省的

3.1.3、权限修饰符

1、Java规定的四种权限(从小到大): private 、缺省、pretected、public

2、4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类

3、具体的,4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类

修饰类的话,只能使用:缺省、public

总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。

image.png

3.2、类的成员之三–构造器

构造器:或称“构造方法”,constructor

construct: 建设、建造;construction:建设;constructor:建设者

3.2.1、构造器的作用

  • 创建对象
  • 初始化对象的信息

只要造对象,就要用构造器

一个类一定有构造器

说明:

  1. 如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
  2. 定义构造器的格式:权限修饰符 类名(形参列表){}
  3. 一个类中定义的多个构造器,彼此构成重载
  4. 一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器
  5. 一个类中,至少会有一个构造器

3.2.2、属性赋值的先后顺序

总结:属性赋值的先后顺序

① 默认初始化

② 显式初始化

③ 构造器中初始化

④ 通过“对象.方法” 或“对象.属性”的方式,赋值

以上操作的先后顺序:① - ② - ③ -④

3.3、JavaBean的使用

JavaBean是一种Java语言写成的可重用组件。
所谓javaBean, 是指符合如下标准的Java类:

​ ➢类是公共的

​ ➢有一个无参的公共的构造器

​ ➢有属性,且有对应的get、set方法

3.4、UML类图

3.5、this关键字

this 关键字的使用

  1. this可以用来修饰:属性、方法、构造器
  2. this修饰属性和方法:
    1. this 理解为:当前对象 或 当前正在创建的对象

3.5.1、this调用方法

在类的方法中,我们可以使用“this.属性” 或 “this.方法”的方式,调用当前对象属性或方法。但是,通常情况下,我们都选择省略"this."。特殊情况下,如果方法的形参和类的属性同名是,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。

3.5.2、this调用构造器

在类的构造器中,我们可以使用“this.属性” 或 “this.方法”的方式,调用当前正在创建的对象属性或方法。但是,通常情况下,我们都选择省略"this."。特殊情况下,如果构造器的形参和类的属性同名是,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。

① 我们在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器

② 构造器中不能通过 “this(形参列表)” 方式调用自己

③ 如果一个类中有n个构造器,则最多有 n-1个"this(形参列表)"

④ 规定:"this(形参列表)"必须声明在当前构造器的首行

⑤ 构造器内部,最多只能声明一个 “this(形参列表)”,用来调用其他的构造器

3.6、package 关键字

  1. 为了更好地实现项目中类的管理,提供包的概念
  2. 使用package声明类或者接口所属的包,声明在源文件的首行
  3. 包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”
  4. 每“ . ”一次,就代表一层文件目录。

补充:同一个包下,不能命名同名的接口、类;

​ 不同的包下,可以命名同名的接口、类。

1678677925273.jpg

MVC设计模式:

M:Model–数据模型层

V:View–视图模型层

C:Controller–控制器层

image.png

3.7、import关键字

import:导入

  1. 在源文件中显式的使用 import 结构导入指定包下的接口
  2. 声明在包的声明和类的声明之间
  3. 如果需要导入多个结构,则并列写出即可
  4. 可以使用“xxx.*”的方式,表示可以导入xxx包下的所有结构
  5. 如果使用的类或接口是java.lang包下定义的,则可以省略import结构
  6. 如果使用的类或接口是本包下定义的,则可以省略import结构
  7. 如果在源文件中使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示
  8. 使用“xxx.*”的方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需显式的
  9. import static:导入指定类或接口中的静态结构:属性或方法
7的eg:

Account account = new Account(2000);
//全类名的方式显示
cs20230308.exer4.Account account1 = new cs20230308.exer4.Account(1001,200,0.123);
9的eg:
//导入类、接口
import java.util.HashMap;
import java.util.Scanner;
//导入属性或方法
import static java.lang.System.*;
import static java.lang.Math.*;

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

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

相关文章

[物理层]传输方式

传输方式 串行传输与并行传输 穿行传输是指数据是一个比特一个比特依次发送的,在发送端与接收端只用一条数据线路 并行传输是指一次发n个比特,在发送端与接收端需要n条数据线路 在网络中计算机通信通常采用串行传输;而在计算机内部&#x…

Minio在Windows的部署并使用Python来操作桶

什么是Minio? MinIO 是一个开源的对象存储服务器,具有高可用性、高性能和可伸缩性。它兼容 Amazon S3 API,因此可以无缝地替代 Amazon S3 作为对象存储的解决方案。 MinIO 可以让你在自己的基础设施中搭建一个对象存储服务,使你能够存储和…

HTML5+CSS3+JS小实例:背景动态变化的登录界面2.0

实例:背景动态变化的登录界面2.0 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" con…

malloc()与calloc()的辨析

malloc()与calloc()的相同点 两者都是常用的内存分配函数&#xff0c;用于动态分配内存 两者返回值类型都为void*&#xff0c;需要强制转换为所需类型 使用完分配的内存后&#xff0c;都需使用free()函数来释放该内存&#xff0c;防止内存泄漏 malloc()与calloc()的不同点 mal…

你可能不知道现在的Java面试有多卷

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;今年面试实在是太卷了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约…

threejs 音频可视化demo

效果&#xff1a; 在线效果预览&#xff1a;Vite App 源码&#xff1a;https://github.com/developer-wgl/ThreeJsDemo 参考&#xff1a;three.js 音乐可视化_threejs音乐可视化_汉武大帝的博客-CSDN博客

谈谈——互联网生活中的隐私保护

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Unity VR:Oculus Integration 中 OVRManager 的 Eye Level,Floor Level,Stage 的区别

Oculus Integration 开发包中有个 OVRManager 脚本被挂载到 OVRCameraRig 物体上。OVR Manager 中有个 Tracking Origin Type 参数&#xff0c;它相当于追踪的参考系&#xff0c;参数分为 Eye Level, Floor Level 和 Stage。 VR 设备会对头显进行追踪&#xff0c;于是现实中头显…

VTK8.2.0的配置过程

VTK8.2.0的配置过程 1、官网下载vtk8.2.0的源码2、下载cmake3、使用cmake对源码进行编译4、报错后对cmake作如下修改配置5、使用vs2017打开生成的项目解决方案6、使用vs2017分别编译形成debug和release版本的可执行代码7、CMAKE_INSTALL_PREFIX/plugins/designer 目录下的 QVTK…

有AI助手帮你,刷任何题都不吃力!

Rider如何配置AI助手&#xff1f; 前言&#xff1a;一、选择AI助手二、如何在Rider中配置CodeWhisperer三、使用方法四、分享你的AI解决方案 明明自觉学会了不少知识&#xff0c;可真正开始做题时&#xff0c;却还是出现了“一支笔&#xff0c;一双手&#xff0c;一道力扣&…

RabbitMQ五种工作模式的简单应用

发布订阅模式(三种方式) 发布订阅模式上一篇我们已经介绍了,这里就不做介绍了,想要看的可以点此链接 在SpringBoot中对RabbitMQ三种使用方式_流殇꧂的博客-CSDN博客 Routing(路由模式)(基于注解的方式) 1.创建交换机和消息队列,类型要为direct(不设置也是默认的配置) //路由模式…

通信算法之173: 物理层峰均比PAPT

一. SC-FDMA技术 OFDM技术&#xff0c;能有效克服宽带通信系统中的频率选择性衰落&#xff0c;降低传输符号间干扰。但4G LTE标准&#xff0c;OFDMA只用在其下行传输&#xff0c;上行端采用了单载波频分复用技术&#xff08;single carrier frequency domain multiple access S…

【办公类-19-01】“微信表情”表情包上传,用Python调整各类尺寸、格式

背景需求&#xff1a; 今天学了“微信表情”的表情图上传流程&#xff0c;发现其中有多种尺寸参数&#xff0c;必须完全符合尺寸、格式&#xff0c;才能上传。 以上有PNG、GIF的不同&#xff0c;有50*50,120*120,240*240,750*400四款差异&#xff0c;手动修改太费时了 我想用…

我第一次面试自动化测试就被diss了,人生惨遭滑铁卢…

如果你恰好刚刚进入一家新公司&#xff0c;领导一上来就让你开展自动化测试&#xff0c;作为一名初出茅庐的测试新人&#xff0c;除了手足无措&#xff0c;你只能默默慨叹自己能力尚欠&#xff0c;眼前只会出现一个又一个无从下手的问题&#xff1a; 作为手工测试&#xff0c;…

MySQL的视图和索引(调优)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.视图是什么&#xff1f; 二.视图…

【周末闲谈】关于计算机的二三事

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 文章目录 前言一、第一台计算机的诞生&#x1f4bb;二、计算机发展历史&#x1f4da;第一代计算机&#x1f4bb;第二代计算机&#x1f4bb;第三代计算机&#x1f4bb;第四代计算机&#x…

国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块

国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 1.28寸圆形IPS彩屏&#xff0c;支持 RGB 65K色显示&#xff0c;显示色彩丰富240X240分辨率…

一篇文章让你搞懂指针和数组笔试题(加深对指针的理解)

指针和数组笔试题解析 下文哦我们直接结合代码进行讲述 一维数组 1 //一维数组 #include<stdio.h> int main() {//一维数组int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n", sizeof(*a))…

【C的葵花宝典进阶篇】之指针进阶(一)

【C语言进阶篇】之指针进阶&#xff08;一&#xff09; 1. 字符指针2. 指针数组2.1 整形指针数组2.2 用指针数组模拟二维数组 3. 数组指针3.1 数组指针的表示方法3.2 深度剖析&数组名和数组名3.3 数组指针的使用3.3.1 在同一函数内直接将数组的地址赋给数组指针3.3.2 数组指…

Flink提交作业时报错Cannot support file system for ‘hdfs‘ via Hadoop

Flink整合HDFS提交作业时报错 分享一个Flink提交作业时的报错&#xff0c;由于我用的是1.12版本的Flink&#xff0c;对于Hadoop3.0新特性是没有支持的&#xff0c;我的Hadoop版本是3.3.1。然后flink-shaded-hadoop-3-uber jar包是没有的&#xff0c;需要手动添加。 报错 Caus…