java mongodb drivers 2升级到3_JAVA从头开始一基础梳理(3-2)

4be3c31142836fd091b5635d584ff730.png

本章为大家介绍类的特性。

首先,第一个特性----封装。

35fdb9425c425d74d8c858bbf9e7b34c.png

在这个类别中,属性id 与属性 color 是可以被外部直接访问和修改的,比如

7d041fc342adf0cccba21c6faa1660ce.png

可以看到,事实上这样的内容是错误的,我们需要在定义属性值时需要加入验证等等操作,这时,我们就需要对类做出封装

59c67a77f88da936c38644fb8d4b1b2f.png
ceece7bc3aec3a757e070799160d3370.png

如此,直接对于类的属性访问变为不可访问。那么如果我们需要对类的属性操作时改怎么办呢,这时,我们需要的是为这些私有属性提供访问函数。

1c7d34bcc48bb098a0a5dfc20bd92bb4.png

我们为Car类的id和color类提供了get/set函数,这时我们可以使用对应函数来操作私有的属性值,如下图.

889d9896c8ea7fde9402f8f197c0b017.png

同时,在set函数中做赋值判断,即可对设置的值做效验。

封装一定程度上保证了类数据的安全性,但在其他方面,也提高了类属性访问的难度。

接下来,我们来了解类的第二个特性---继承。

回到上一节,我们发过这样一张关系图

df6f4495706d2df4f442285d70594175.png

其中卡车和轿车均属于车这个类别,我们用代码来实现如下

fb53755acae6c32de4650acf24f24511.png
dc0dd97a33d915191ef172a57cdfcf4a.png

我们可以看到,因为卡车本来属于车下的一个分类,所以很自然,他拥有了车这个类别的一些通用的属性(还有函数),既然是车类别下的一个子类,那么我们只需要让卡车类获得车类别的通用属性。

a2e8c2e24e1eab1b9dc366e78e88cef9.png

加入extends关键字,继承了Car的公用属性,这里需要说明的是,继承关系直接获得的是父级类的公用属性,即public关键字所修饰的属性及函数(这里不讨论protected),看如下代码

51dcea17c335984f0d1e60976ef03087.png

我们看到,当使用Truck对象调用Car类属性length时是成功的,而调用id属性却失败,这就是因为id属性的修饰符为private。那么如果我们需要访问父类的private属性时,需要怎么做呢,首先,我们需要父类提供public修饰的私有属性访问函数,即get/set,然后,在子类中使用super关键字进行调用。

f08b2033551bce4749e65d2e0acb1116.png
7d6b5e3794f758e4117ee68d9b2caab2.png

此时,使用Truck对象的getSuperId函数即可访问父类私有属性。

ps:实际上按照我的代码的写法,是添加了复杂度,是没有必要的,一般来说,作为父类,也只会提供通用,public修饰的属性。这里只是为了演示如何使用所以故意做这样的设计。

继承特性一定程度上简化了代码,但是也降低了一定的代码可读性,同时需要注意,每一个类只可以有一个父类,可以有无限多个子类。

类特性的最后一个----多态

多态,指对象的多种形态,多态有一些必要条件,需要有继承或实现(实现是接口的一种逻辑,在后续章节会有介绍),必须重写或实现父类函数或接口,引用需要指向子类对象。

具体使用看如下码图(继承)

670b53d1f112c674f2dae777da5fb325.png
fbbc742fe3864143b26e83bebf2b01e5.png

可以看到 Truck类重写了Car父类的go函数(使用override注解,表示当前函数为覆盖父类函数),此时我们看看如下几个调用示例

bc00e24884bbd9ef7b1e226ea3ae8589.png

运行结果为

0ae9078fa6a70deb3f4e4c7aba5a91dc.png

这就说明,当程序运行时对于函数,调用父类函数还是子类函数的依据是具体实现。

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

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

相关文章

C 语言第6节课

我上课C语言的第6节的笔记 &#xff1a;C语言真的需要多做多练多理解&#xff0c;不然真的学不懂.记不住呀。第一题&#xff1a;睇图片解题。main(){int x,y;scanf("%d",&x);if(x<0)printf("y%d",0);if(x>0&&x<5)printf("y%d&qu…

activiti idea 请假流程_IDEA开发流程Activiti需要注意的一些坑

1、慎用IDEA2020最新版本IDEA2020最新版本迎来了重大升级&#xff0c;对java和spring有了更好更强大的开发支持&#xff0c;但是对于Activiti流程开发却不再支持&#xff0c;可能是因为actiBPM插件太老&#xff0c;或者IDEA2020对插件支持做了规范要求等等&#xff0c;请各位喜…

VIPCA无法运行

本文转自ITPUB上一兄弟总结&#xff0c;以备查询。 今天一早来&#xff0c;同事说他周末在安装 rac 出问题了&#xff0c;始终无法使用vipca 创建 vip资源 &#xff0c; 叫我帮忙看看。 他用的是 vmware server 2.0 搭建 虚拟 rac 。 一. 环境如下  OS: Red Hat Enterprise …

python加权最小二乘_【Python】统计科学之加权最小二乘法

首页专栏python文章详情0统计科学之加权最小二乘法张俊红发布于 今天 10:03今天这篇来讲讲加权最小二乘法(WLS)&#xff0c;加权最小二乘是在普通的最小二乘回归(OLS)的基础上进行改造的&#xff0c;主要是用来解决异方差问题的。OLS的常规形式如下&#xff1a;我们在前面讲过O…

删除电脑中的mysql数据库吗_【数据库】怎么彻底删除mysql服务?

彻底删除mysql服务的步骤&#xff1a;1、关闭mysql服务在cmd命令行输入以下命令net stop mysql或者 我的电脑右键->管理->服务&#xff0c;进入后手动关闭。2、删除MySQL服务在cmd中&#xff0c;输入sc delete mysql&#xff0c;删除服务。但是MYSQL服务只是显示禁用状态…

mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区

转载&#xff1a;https://www.cnblogs.com/alvin_xp/p/4162249.html大型网站为了软解大量的并发访问&#xff0c;除了在网站实现分布式负载均衡&#xff0c;远远不够。到了数据业务层、数据访问层&#xff0c;如果还是传统的数据结构&#xff0c;或者只是单单靠一台服务器扛&am…

continue 的用户及实例

continue 跳出本次循环&#xff0c;继续下一次循环 “break”是跳出整个循环 实例1&#xff1a; for i in range(10): if i <5: continue    #这里条件是小于5&#xff0c;满足条件的就跳出了本次循环&#xff0c;不在执行print&#xff0c;所以最终打印的是5…

mysql报错注入实战_MySQL手工注入实战

实战记录&#xff0c;日本某站注入点 and 语句测试and11 返回正常&#xff0c;and2跳回首页&#xff0c;可能过滤了用 ’ 测试返回错误页面判断为注入点order by语句查询字段数测试字段数为9and 12 UNION SELECT 1,2,3,4,5,6,7,8,9报错联合查询语句&#xff0c;查询显示位2、3为…

20个简约风格网站设计作品欣赏

这篇文章收集了20个简洁清爽的网站设计作品案例&#xff0c;设计师们能够通过这些优秀的网页设计作品获得灵感&#xff0c;进而设计出更精美&#xff0c;更具有创意的网站作品&#xff0c;一起欣赏。vnsagaPure – Minimal WordPress themeAssemblydeladeeus design studioHocu…

python 股票自动交易从零开始_Python股票自动交易从零开始

课程目录1.Python股票自动交易从零开始~第一集~简介(Av24528809,P1).mp42.Python股票自动交易从零开始~第二集~安装工具包(Av24528809,P2).mp43.Python股票自动交易从零开始~第二集番外~配置Mac工作环境(Av24528809,P3).mp44.Python股票自动交易从零开始~第三集~获得股票列表-A…

python 银行工作_Python:银行系统实战(一)

最近突然抽筋想做一下大学时候做过的银行系统实战~代码就发在这里啦~学弟学妹们请查收~不过是python版本的&#xff0c;你们也用不上。。。两个py文件&#xff0c;一个是后台系统处理的&#xff0c;一个是总控py文件如下&#xff1a;view.py 内容如下&#xff1a;import timecl…

深入剖析LinkedList:揭秘底层原理

文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作&#xff08;增删改查&#xff09;2.4 LinkedList的遍历方式 三、 …

mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程

准备篇一、环境说明&#xff1a;操作系统&#xff1a;Windows Server 2019PHP版本&#xff1a;php 7.3.11MySQL版本&#xff1a;MySQL 8.0.18.0二、相关软件下载&#xff1a;1、PHP下载地址&#xff1a;https://windows.php.net/downloads/releases/php-7.3.11-nts-Win32-VC15-…

SharePoint Server和Office 365之间的混合模式集成概述

正如您可能已经知道的那样&#xff0c;云中的Microsoft Office 365和SharePoint Server 2013/2016内部部署可以通过多种方式协同工作。这些通常被称为混合模式&#xff0c;因为它们将功能集成到SharePoint Online和SharePoint内部部署中。 以下Microsoft提供了下对照表&#xf…

图片压缩

1&#xff09;一张图片如何显示到屏幕上 一个电脑显示器, 上面的像素点就是内存/显存一张图片表达的颜色信息赋值到那块内存就是图片显示2&#xff09;图片文件的格式 图片文件的格式&#xff0c;无论是哪一种&#xff0c;最终都要包含原始颜色数据 原始颜色数据 一个像素用rgb…

python io操作需要用到什么硬件_Python I/O 操作(一)

一、I/O 概念I/O 指的是相对内存而言的 input 和 output从文件、数据库、网络向内存中写入数据叫做 input从内存向文件、数据库、网络中输出数据叫做 outputI/O 操作相比 CPU 操作而言是极慢的&#xff0c;往往 CPU 运行一秒钟&#xff0c;I/O 要忙几个月&#xff0c;所以要提高…

fortinate防火墙使用本地用户三步开通PPTP ***

1. 建立用户Local用户及用户组 2. 启用PPTP ***拨号功能 3. 建立***地址&#xff0c;并设置策略&#xff1a;让***用户可以访问内部和外部 &#xff08;注&#xff1a;建***地址和策略时&#xff0c;接口选择是外部&#xff0c;因为是外部拨入的&#xff09; 完成上述三步&…

李国浩20179307第二周作业

人物介绍 国内知名黑客&#xff1a; 吴翰青&#xff1a;阿里云首席安全科学家、云盾负责人&#xff0c;也是网络安全领域为人熟知的“刺”、“道哥”和“小黑”。他要想黑谁家的网站&#xff0c;别说企业、医院&#xff0c;银行都要彻夜难眠。但小黑是白帽子&#xff0c;黑客最…

转lua解释执行脚本流程

本文转自&#xff1a;http://www.cnblogs.com/zxh1210603696/p/4458473.html #include "lua.hpp"#include <iostream> using namespace std;#pragma comment(lib, "lua5.1.lib")struct lua_guard{lua_State *pL;lua_guard(lua_State *s) :pL(s){}~lu…

BZOJ1085: [SCOI2005]骑士精神

【传送门&#xff1a;BZOJ1085】 简要题意&#xff1a; 有一个5*5的棋盘&#xff0c;棋盘上有12个白棋子&#xff0c;12个黑棋子&#xff0c;和一个空格&#xff0c;每只棋子只能按照马走日的规则移动&#xff0c;求出最少步数达到以下状态 题解&#xff1a; DFSA* DFS很容易做…