《学懂java》:java基础篇

他们都告诉你,必须要做什么,却没告诉你为什么。
##《 欢迎访问我的网站,ai工具箱,https://4398ai.com里面有免费的chatgpt网站,和很多免费的编程资源的干货》
在这里插入图片描述

首先说一下接口,抽象(abstract),final,类的概念。
:如何用数据表示一个物体?这个物体有多个属性,可能还会有一些功能,答案是类。类的出现,使数据的表示更加高维、方便,类不仅仅是用于描述一个物体,如果你面前有一条狗,叫大黄,如果你用类表示这条狗是你的大黄,是不对的,类是一种模板,它描述一类对象的行为和状态,如果你想说明它是大黄,得从类出发,赋予这个类相应的属性,此时,类变成了对象。
物体—提取属性动作—》类(对物体的抽象)—赋予具体值(实例化)—》对象(表示具体的事物)
比如人与人之间有很多相似的属性,但是可能会稍有不同,重复的声明会很麻烦冗余。通过继承便可以解决这个麻烦。

类的变量:
变量是用于表示具体数值,在类中有三种变量,为什么要有三种变量?整一种不行吗?当然不行,三种变量分别有不同的作用和意义,局部变量消失的最快,消失的快,存在感低的好处是,可以节省计算机的内存资源,适用于不需要长时间保存数据的场景:上下文关联性不强,比如说我去面馆吃饭,我不欠钱,吃碗面付钱,每次重新执行一次就行了。
然后是成员变量,需要和类一起存在,就和人的一生一样,记忆应该是持续的,除了失忆症、死亡,记忆应该和人一直在一起。

再说一下类变量,也称实例变量,这里“实例”说明了 它是给所有实例都内定的值,即在类中声明该实例变量之后,该类的实例都会有该值,起到了减少重复相同声明的作用。

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

抽象:类是对象的描绘模板,抽象是干啥的?从哲学的层面来说,抽象的意义在于通过抽象能透过事物的表面现象抓住事物的本质。类已经可以抓住事物的本质了,还要抽象类干嘛?
举一个例子:

在现实生活中,我们可以看到很多不同种类的动物,比如狗、猫、鸟、鱼等等。这些动物都有一些共同的特征,比如它们都有生命、需要食物和水来维持生命、可以移动等等。这些共同的特征就可以抽象出一个“动物”类。

但是,有些特定的动物,比如“鸟”和“鱼”,它们有一些特殊的属性和方法,比如“鸟”可以飞行,“鱼”可以游泳。这些特殊的属性和方法不能在“动物”类中定义,因为不是所有的动物都具备这些特点。

这时候,我们就可以使用抽象类来解决这个问题。抽象类是一种不能被实例化的类,它只能被用作其他类的父类。抽象类中可以定义一些抽象方法,这些方法只有方法名,没有具体的实现。子类必须实现这些抽象方法,才能被实例化。

在这个例子中,我们可以将“动物”类定义为一个抽象类,其中定义一些通用的属性和方法,比如“体重”、“年龄”、“吃饭”、“睡觉”等等。然后,我们可以再定义一些具体的动物类,比如“狗”类、“猫”类、“鸟”类、“鱼”类等等,这些类都继承自“动物”类,并且必须实现“飞行”、“游泳”等抽象方法。

通过这种方式,我们可以将不同种类的动物归为一类,从而方便我们进行管理和使用。同时,抽象类还可以强制子类实现特定的方法,从而提高代码的可靠性和可维护性。

同时抽象也可以完成多态的作用:

定义抽象类Animal(提高了代码的复用性和可维护性。)

from abc import ABC, abstractmethodclass Animal(ABC):@abstractmethoddef eat(self):pass@abstractmethoddef sleep(self):passdef breathe(self):print("Animal is breathing")# 定义子类Dog
class Dog(Animal):def eat(self):print("Dog is eating")def sleep(self):print("Dog is sleeping")# 定义子类Cat
class Cat(Animal):def eat(self):print("Cat is eating")def sleep(self):print("Cat is sleeping")# 创建Dog和Cat对象并调用方法
dog = Dog()
dog.eat()
dog.sleep()
dog.breathe()cat = Cat()
cat.eat()
cat.sleep()
cat.breathe()

再说一下接口:有了抽象类,抽象方法,为啥还要有接口?
相比于抽象类,接口更加纯粹,更加偏向于对方法的复用。所以接口只能包含抽象的方法。

从单词的含义上说extends 与 implement都是继承。为啥要整两个?
是因为他们服务的对象不同:
extends 是用于继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承——》不声明为final,或者是抽象类,说明创建该类的人是希望这个类是打开的,可以复用的普通类,而extend对可复用的普通类进行继承,对其功能属性进行修改,而减少冗余代码。

JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ,比如 class A extends B implements C,D,E——》它的服务对象是接口。

术语话来说:
extends 继承类;implements 实现接口。

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

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

相关文章

vue实现商品列表,组件抽离

1.需求说明 my-tag 标签组件封装 ​ (1) 双击显示输入框,输入框获取焦点 ​ (2) 失去焦点,隐藏输入框 ​ (3) 回显标签信息 ​ (4) 内容修改,回车 → 修改标签信息 my-table 表格组件封装 ​ (1) 动态传递表格数据渲染 ​ (2) 表头支…

15 款 PDF 编辑器帮助轻松编辑、合并PDF文档

PDF 编辑器在当今的数字环境中至关重要,因为 PDF 已成为共享和存储信息的首选格式。只需几分钟,可靠的 PDF 编辑器即可让用户能够根据其特定需求修改、定制和定制文档。在本文中,我们全面汇编了 15 款最佳免费 PDF 编辑器,让您可以…

Javaweb之HTML,CSS的详细解析

2.4 表格标签 场景:在网页中以表格(行、列)形式整齐展示数据,我们在一些管理类的系统中,会看到数据通常都是以表格的形式呈现出来的,比如:班级表、学生表、课程表、成绩表等等。 标签&#xff…

目标跟踪(DeepSORT)

本文首先将介绍在目标跟踪任务中常用的匈牙利算法(Hungarian Algorithm)和卡尔曼滤波(Kalman Filter),然后介绍经典算法DeepSORT的工作流程以及对相关源码进行解析。 目前主流的目标跟踪算法都是基于Tracking-by-Detec…

YoloV8目标检测与实例分割——目标检测onnx模型推理

一、模型转换 1.onnxruntime ONNX Runtime(ONNX Runtime或ORT)是一个开源的高性能推理引擎,用于部署和运行机器学习模型。它的设计目标是优化执行使用Open Neural Network Exchange(ONNX)格式定义的模型,…

一、Hadoop初始化配置(final+ubuntu保姆级教程)

1、配置虚拟机 三台虚拟机,分别为node1、node2、node3,内存分别为4G、2G、2G,现存最好为(>40G),如下: 2、修改主机名 分别打开三台虚拟机,root用户输入一下命令: no…

Maven3.9.1安装及环境变量配置

一、Maven的下载与安装 maven各版本下载地址 打开链接后自行选择对应版本 下载完成后解压安装,最好别选择c盘,安装目录路径等使用英文,避免产生其他问题 我这里选择的是D盘 二、Maven的环境变量配置 2.1、右键点击此电脑选择属性,点击高级系统设置,点…

win10语言切换调整为像win7一样,设置纯英文键盘切换,使用ctrol+shift切换键盘

文章目录 引入键盘布局说明安装美式键盘去掉微软键盘,修改布局切换快捷键最终效果 引入 我们在玩游戏或者写代码的时候,常常需要使用shift键,而输入法的shift键常常是中英切换按键,这就让人非常不爽了,这里仿照在win7…

信息科技风险管理:合规管理、技术防控与数字化

信息科技对金融业务发展所起的作用是举足轻重的。近年来,金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员,我们笃信信息科技是一个非常有用的工具,一个兼具产品思维和管理思维、拥有高质增效能力的工具。 这个工…

服务器的操作系统,你选择哪些?

OpenCloudOS CentOS CentOS Stream Ubuntu Debian Windows Server

接口测试工具

接口测试的重要性 接口测试: 直接对后端服务的测试,是服务端性能测试的基础,是测试工程师的必备技能。 接口测试的概念 接口:系统之间数据交互的通道 接口测试:校验接口响应数据与预期数据是否一致 接口信息解析 …

一款好用的PDF转翻页电子书网站

​你是否曾经遇到过PDF文件无法翻页或者阅读不便的问题?今天给大家推荐一款好用的PDF转翻页电子书网站,让你轻松阅读PDF文件,不再烦恼翻页问题! 一、网站介绍 这款FLBOOK在线制作电子杂志网站支持多种电子文件格式转换&#xff0…

Nginx配置

localtion规则解释 #表示精确匹配,优先级也是最高的 ^~ #表示uri以某个常规字符串开头,理解为匹配url路径即可 ~ #表示区分大小写的正则匹配 ~* #表示不区分大小写的正则匹配 !~ #表示区分大小写不匹配的正则 !~* #表示不区分大小写不匹配的正则 / #通用匹配&#…

oracle_19c 安装

oracle安装部署 1、安装docker,docker-compose环境。 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun curl -L "https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/b…

AD9371 官方例程 NO-OS 主函数 headless 梳理(二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

scrapy案例教程

文章目录 1 scrapy简介2 创建项目3 自定义初始化请求url4 定义item5 定义管道 1 scrapy简介 scrapy常用命令 |命令 | 格式 |说明| |–|–|–| |startproject |scrapy startproject <项目名> |创建一个新项目| |genspider| scrapy genspider <爬虫文件名> <域名…

古典舞学习的独舞与群舞,古典舞的成品舞蹈教学大全

一、教程描述 本套教程的古典舞是很全面的&#xff0c;不仅有舞蹈动作分解教学&#xff0c;而且有成品舞的完整教学&#xff0c;同时提供独立的背景音乐文件&#xff0c;可以让你更快地学会古典舞。本套教程&#xff0c;大小30.54G&#xff0c;共有276个文件。 二、教程目录 …

如何实现合同字段快速选择填充

合同系统中&#xff0c;经常需要往文档中的预留位置填入内容&#xff0c;这些位置的内容往往不是固定的&#xff0c;而是已知可选的&#xff0c;比如&#xff1a;甲方、乙方、联系电话等等。每次都重复地填写这些内容&#xff0c;未免太过于繁琐&#xff0c;那么有没有什么好的…

初步利用Ansible实现批量服务器自动化管理

1.Ansible介绍 Ansible是一款开源的自动化运维工具, 在2012年由Michael DeHaan创建, 现在由Red Hat维护。Ansible是基于Python开发的,采用YAML语言编写自动化脚本playbook, 可以在Linux、Unix等系统上运行, 通过SSH协议管理节点, 无需在被管理节点安装agent。Ansible以其简单、…

机器学习实战:基于sklearn的工业蒸汽量预测

文章目录 写在前面工业蒸汽量预测1.基础代码2.模型训练3.模型正则化4.模型交叉验证5.模型超参空间及调参6.学习曲线和验证曲线 写在后面 写在前面 本期内容&#xff1a;基于机器学习的工业蒸汽量预测 实验环境&#xff1a; anaconda python sklearn 注&#xff1a;本专栏内所有…