面向对象的三大特性:封装、继承、多态
一、封装
封装是面向对象的核心思想。是以类为载体,将对象的属性和行为封装起来,对外隐藏其实现细节。
封装保证了类内部数据结构的完整性,使得外部(使用该类的用户)不能轻易地直接操作此数据结构,只能执行该类的允许的公开的数据(一般指方法);从而避免外部操作对内部数据的影响,提高了程序的可维护性。
二、继承
继承主要使利用特点对象之间的共有特性,将这些共有特性抽象出来作为基类,让继承该基类的其他类都拥有该基类的特性,而不需要重复实现,同时还可以自定义各自的特有能力和属性。如:麻雀和雕都是鸟类,鸟类都有翅膀,并且可以飞。就可以将鸟类作为基类抽象出来,麻雀和雕都继承鸟类后,就继承了鸟类的翅膀属性(变量)和飞的能力(方法),同时麻雀可以自定义自己吃虫子的能力,而雕自定义自己吃肉的能力。继承原有的功能,增加自己新的功能,实现了拓展和复用。
Java中,继承使用 extends 关键字来实现,其中Java规定了java.lang.Object 类作为所有的类直接或间接的父类(当类没有继承其他类时,java默认继承Object类,当类继承了其他类时,可以向上追溯,最终继承的类就是Object类)。java规定类只能继承一个类,但是一个类可以被多个类继承(一个子类只能有一个直接父类,一个父类可以有多个子类),类之间可以有多层的继承关系,直接继承的是直接父类,父类的父类就是间接父类,而最上层就是Object。
注:
1、extends:单一继承,可以让一个类继承一个父类
2、super:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
3、this:指向自己的引用。引用自身的属性和方法。
4、final:当用final修饰类时,是把类定义为不能继承的,即最终类;
用于修饰方法时,该方法不能被子类重写;
用于修饰属性时,该属性不可被二次赋值。
三、多态
1.类的多态:
将父类对象应用于子类的特征就是多态。
如上述鸟类的例子,将子类麻雀和雕的对象都看作是父类的实例对象,当鸟类在吃东西时,就会有不同的表现形式,这就是多态的基本思想,向上转型。
instanceof:向下转型的关键字。在向上转型后,父类对象无法调用子类对象特有的方法,所以有了向下转型。
class Animals {public void sound(){System.out.println("动物的叫声");}
}
class Dog extends Animals{@Overridepublic void sound() {System.out.println("汪汪汪~~~");}public void eat(){System.out.println("狗在吃骨头");}
}
class Cat extends Animals{@Overridepublic void sound() {System.out.println("喵~~~");}public void play(){System.out.println("猫在玩耍");}
}
class Test{public static void main(String[] args) {//向上转型Animals a = new Dog();// Animals a = new Cat();a.sound();//a.eat()方法时无法调用的,如果使用需要向下转型//向下转型,先判断属于Dog还是Cat的实例,属于谁的实例就转型成谁if(a instanceof Dog){Dog dog = (Dog) a;dog.eat();} else if (a instanceof Cat) {Cat cat = (Cat)a;cat.play();}}
}
2.方法的多态
重写
发生在子类上,子类重写父类的方法,方法名、参数、返回值均相同。
重写与重载
重载发生在同一个类内部,方法名相同,参数数量或参数类型必须有不同,返回类型可以相同可以不同。
1、重写(Override)重写是子类对父类允许访问的方法进行重写, 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类子类和父类在同一个包中,那么子类可以重写父类除了声明为 private 和 final 的方法外的所有方法子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。访问权限不能比父类中被重写的方法的访问权限更低。父类的成员方法只能被它的子类重写,子类能够根据需要实现父类的方法重写方法抛出的异常范围不能大于父类。异常也有继承关系,所以子类能抛出的异常不能高于父类参数列表与被重写方法的参数列表必须完全相同。声明为 final 的方法不能被重写。声明为 static 的方法不能被重写,但是能够被再次声明。构造方法不能被重写。如果不能继承一个类,则不能重写该类的方法。
2、重载(Overload)重载是在一个类里面,方法名字必须相同,而参数必须不同。返回类型可以相同也可以不同。被重载的方法可以改变返回类型;被重载的方法可以改变访问修饰符;被重载的方法可以声明新的或更广的检查异常;无法以返回值类型作为重载函数的区分标准。
3、方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。方法重载是一个类中定义了多个同名的方法,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载方法重写是在子类存在方法与父类同名的方法,而且参数的个数与类型一样,就称为重写方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
相关文章:

面向对象的三大特性:封装、继承、多态
一、封装 封装是面向对象的核心思想。是以类为载体,将对象的属性和行为封装起来,对外隐藏其实现细节。 封装保证了类内部数据结构的完整性,使得外部(使用该类的用户)不能轻易地直接操作此数据结构,只能执…...

目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用(中)
目录 3.4 实验结果与分析 深度融合注意力跨尺度复合空洞残差交通目标检测算法...

前端GET请求下载后端返回数据流文件,并且处理window.open方法跳转白屏方法
平时常用导出都是用window.open方法 点击跳转连接:使用 window.open 下载 const downError 地址?&参数${参数|| }; const downError Url/xxx/xxx?&orgId${orgId || };window.open(downError, "_self");//调用window.open方法导出 而使用…...

SD321放大器3V输入电流电压保护二极管25C电源电流
Sd 321运算放大器可以在单电源或双电源电压下工作, 可以使用最坏情况下的非反相单位增益连接来适应。如 具有真微分输入,并且保持在线性模式,输入共模电压 果放大器必须驱动较大的负载电容,则应使用较大的闭 为0。Vpc-这种放大器可…...

geoserver SQL注入、Think PHP5 SQL注入、spring命令注入
文章目录 一、geoserver SQL注入CVE-2023-25157二、Think PHP5 SQL注入三、Spring Cloud Function SpEL表达式命令注入(CVE-2022-22963) 一、geoserver SQL注入CVE-2023-25157 介绍:GeoServer是一个开源的地理信息系统(GIS&#…...

scrapy的入门
今天我们先学习一下scrapy的入门,Scrapy是一个快速的高层次的网页爬取和网页抓取框架,用于爬取网站并从页面中提取结构化的数据。 1. scrapy的概念和流程 1.1 scrapy的概念 我们先来了解一下scrapy的概念,什么是scrapy: Scrapy是一个Python编写的开源网络爬虫框架…...

大数据Scala教程从入门到精通第七篇:Scala在IDEA中编写Hello World
一:Scala在IDEA中编写Hello World 想让我们的idea支持scala的编写,需要安装一个插件。...

设计模式之数据访问对象模式
在Java编程的浩瀚星海中,有一个模式低调却强大,它像是一位默默无闻的超级英雄,支撑起无数应用的数据脊梁——那就是数据访问对象(DAO, Data Access Object)模式!想象一下,如果你能像操纵魔法一样…...

Spring aop切面编程
Spring aop切面编程 如何使用利用AuditAction创建切入点 如何使用 Aspect // 1. 创建一个类,用Aspect注解标记它,表明这是一个切面类。 Component public class LoggingAspect {// 2. 定义切点:在通知方法上,使用切点表达式来指定…...

如何更好地使用Kafka? - 事先预防篇
要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…...

如何解决 IPA 打包过程中的 “Invalid Bundle Structure“ 错误
哈喽,大家好呀,淼淼又来和大家见面啦,咱们行业内的应该都知道,在开发 iOS 应用时,将应用打包成 IPA 文件是常见的步骤之一。最近很多小伙伴们说在打包过程中,有时会遇到 "Invalid Bundle Structure&qu…...

Vuex:Vue.js 的状态管理库
一、Vuex 简介 Vuex 是 Vue.js 的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 的出现解决了组件间共享状态的问题,使得状态管理变得简单、可预测和可维护。 二、Vuex 核心概…...

【简单介绍下Sass】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...

IM 是什么?
在当今数字化的时代,即时通讯(IM)已经渗透到人们的日常生活和企业的工作环境中。IM技术的快速i发展为人们提供了一种高效、便捷的沟通方式,不仅推动了社会的信息化进程,也提升了企业的协同效率和竞争力。 作为企业级I…...

俄罗斯方块的代码实现
文章目录 首先是头文件的引入部分接下来是一些预处理指令接下来定义了两个结构体:接下来是全局变量g_hConsoleOutput,用于存储控制台输出句柄。之后是一系列函数的声明最后是main函数源码 首先是头文件的引入部分 包括stdio.h、string.h、stdlib.h、tim…...

出海企业哪种组网方案更省事?
对于出海企业而言,建立跨地区的数据传输和协同工作至关重要,以提升运营效率。因此,网络构建变得迫在眉睫。通过构建企业组网,企业能够加强与海外分支、客户和合作伙伴之间的联系,加速海外业务的发展。 然而,…...

triton编译学习
一 流程 Triton-MLIR: 从DSL到PTX - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/671434808Superjomns blog | OpenAI/Triton MLIR 迁移工作简介https://superjom...

源码知识付费系统,在线教学平台需要优化什么?
在线教育关于广大的关注者而言属于快捷度非常高的传达途径,尤其是白日没有过多时间的上班族或学习繁忙的学生,均能够通过可靠的在线教育完结自己的目的。如此巨大的市场潜力使得以在线教育为主的公司数量呈现出直线上升的趋势,很多的在线教育…...

后端常用技能:解决java项目前后端传输数据中文出现乱码、问号问题
0. 问题背景 最近做一个解析数据的小工具,本地运行时都正常,发布到服务器上后在导出文件数据时发现中文全部变成了问号,特此记录下问题解决的思路和过程 1. 环境 java 1.8 springboot 2.6.13 额外引入了fastjson,commons-csv等…...

SpringBoot中使用MongoDB
目录 搭建实体类 基本的增删改查操作 分页查询 使用MongoTemplate实现复杂的功能 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 在ap…...

【TS】入门
创建项目 vscode自动编译ts 生成配置文件 tsc --init 然后发现终端也改变了:...

Apache ECharts
Apache ECharts介绍: Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 官网地址:https://echarts.apache.org/zh/index.html Apache ECh…...

超详细的胎教级Stable Diffusion使用教程(四)
这套课程分为五节课,会系统性的介绍sd的全部功能和实操案例,让你打下坚实牢靠的基础 一、为什么要学Stable Diffusion,它究竟有多强大? 二、三分钟教你装好Stable Diffusion 三、小白快速上手Stable Diffusion 四、Stable dif…...

串口属性中的BM延时计时器问题
如果使用程序修改则需要修改注册表对应位置如下 第一个示例(217) 第二个示例(219) 需要注意的事情是修改前必须点查看串口名称(例如上图是com5) 程序修改: 有没有办法以编程方式更改USB <…...

PyQt6--Python桌面开发(8.QPlainTextEdit纯文本控件)
QPlainTextEdit纯文本控件...

Java | Leetcode Java题解之第83题删除排序链表中的重复元素
题目: 题解: class Solution {public ListNode deleteDuplicates(ListNode head) {if (head null) {return head;}ListNode cur head;while (cur.next ! null) {if (cur.val cur.next.val) {cur.next cur.next.next;} else {cur cur.next;}}return…...

重生奇迹mu再生宝石怎么用有什么用
重生奇迹mu再生宝石有2个用处: 1、在玛雅哥布林处给380装备加PVP属性4追4以上的380级装备,守护宝石一颗,再生宝石一颗,成功得到PVP装备,失败宝石消失,装备无变化; 2、给非套装点强化属性用法跟祝福,灵魂,生命一样直接往装备上敲,成功得到随机强化属性一…...

pdf 文件版面分析--pdfplumber (python 文档解析提取)
pdfplumber 的特点 1、它是一个纯 python 第三方库,适合 python 3.x 版本 2、它用来查看pdf各类信息,能有效提取文本、表格 3、它不支持修改或生成pdf,也不支持对pdf扫描件的处理 import glob import pdfplumber import re from collection…...

PostgreSQL的学习心得和知识总结(一百四十三)|深入理解PostgreSQL数据库之Support event trigger for logoff
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…...

https免费证书获取
获取免费证书的网址: Certbot 1. 进入你的linux系统,先安装snapd, yum install snapd 2. 启动snapd service snapd start 3.安装 Certbot snap install --classic certbot 注意如下出现此错误时,需要先建立snap 软连接后&am…...