Java面向对象详解(下)

news2024/11/17 17:41:39

文章目录

  • 📖前言:
  • 🏅封装
      • • `封装的概念`
      • • `封装的好处`
      • • `封装的核心理解`
  • 🏅继承
      • • `继承的概念`
      • •`继承的特点`
      • ● `何时使用继承?`
      • ● `继承的形式`
      • ● `继承的传递性`
      • ● `继承的构造方法`
    • 🧸super关键字
      • 🎇用途:
      • ⚠理解误区:
    • 🧸方法的重写(OverRide)
    • 🧸抽象类
  • 🏅多态
      • • `多态的概念`
      • ● `多态存在的三个必要条件`
      • ● `多态存在的效果`
      • ● `多态向上转型(类比 类型隐式转换)`
      • ● `多态向下转型(类比 类型强制转换)`
    • 🧸instanceof关键字
    • 🧸final关键字
    • 🧸接口
      • `接口的定义和使用`

📖前言:

本篇会详细讲述面向对象三大特征:封装,继承,多态,super关键字,instanceof关键字,final关键字,接口,

🏅封装

封装的概念

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 。

封装的好处

在这里插入图片描述

封装的核心理解

广义的封装:将某些功能封装到一个方法内,进行包装。
面向对象语言中的封装
是通过访问权限修饰符进行控制 对类中信息设置其可见性。对信息进行隐藏,不让外界知道类中有哪些信息。

🏅继承

继承的概念

继承:继承是面向对象程序设计不可缺少的设计思想,是实现代码可重用的根基,是提高代码可扩展性的主要途径。
● 继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力

继承的特点

● 在JAVA中使用extends关键字来表示继承关系。
● JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个直接父类。
● 继承之后子类可以调用父类的所有非私有属性和非私有方法
继承是代码重用的一种方式

何时使用继承?

继承与真实世界类似
在这里插入图片描述

继承的形式

在这里插入图片描述

继承的传递性

C类从B类继承,B类又从A类继承
那么C类就具有B类和A类的所有非私有属性和非私有方法
【注意】当一个没有继承任何一个类时,jvm会默认让类继承Object类,Object是 java为所有类提供的基类

继承的构造方法

子类构造方法会先调用父类构造方法
🪅使用super关键字可以调用父类任意一个构造方法,必须写在构造方法的第一行
🪅如果子类的构造方法中没有显式地调用父类构造方法,则系统默认调用父类无参数的构造方法。

🧸super关键字

🎇用途:

使用super关键字可以访问父类成员
• 用super.成员变量名来引用父类成员变量
• 用super.方法名(参数列表)访问父类的方法。
• 用super.构造方法(参数列表)访问父类构造方法

⚠理解误区:

: 不要把super误认为是父类对象.
在创建子类对象时,不会创建父类对象. 只会将父类中的信息加载到子类对象中存储
在这里插入图片描述

🧸方法的重写(OverRide)

● 🎇应用场景
当父类的方法实现不能满足子类需求时,可以对方法进行重写( override),在子类中可以根据需要对从基类中继承来的方法进行重写
🎇方法重写规则
• 方法名相同、参数列表相同;
• 返回值类型相同;
• 访问权限不能小于父类权限;
【注意】构造方法,静态方法不能重写,成员变量不存在重写

🧸抽象类

🎇概念
● 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
● 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法。
● 用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类

🎇抽象方法
• 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现(没有方法体).
• 抽象方法必须用abstract关键字进行修饰
🎇特点 :
• 抽象类不能被实例化,但可以有构造方法,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
● 抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类。
🎇一般语法 :
在这里插入图片描述
【总结】抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象法程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能。

🏅多态

多态的概念

同一种事物,在不同时刻表现不同的状态
使用父类可以来表示任意的子类对象

多态存在的三个必要条件

● 要有继承(包括接口的实现)(前提条件)
● 要有重写(前提条件)
● 父类引用指向子类对象

多态存在的效果

在这里插入图片描述说白了:就是方法调用的时候只能调用父类的(因为它是父类类型),但是运行的时候运行的是子类中的方法。
Animal dog1 = new Dog();
编译期间看左边,运行期间看右边
🏴‍☠️:对于静态方法,成员变量,编译运行均看(左边)父类

多态向上转型(类比 类型隐式转换)

🎇向上转型:就是正常的多态形式
Animal dog1 = new Dog();
(把子类对象上升为父类类型)
🎇弊端:
由于在编译期间只能调用父类的方法,导致子类自己特有的方法调用不到

多态向下转型(类比 类型强制转换)

🎇向下转型
Dog dog1 = (Dog) animal ;
(把父类对象降为子类类型)
🎇向下转型的作用是
为了使用子类中的特有方法。
【注意】如果父类有多个子类的话,会报错。原因是其他子类与Dog类型不兼容,不能相互转换。所以需要使用判断:

 if(animal instanceof  Dog){
	 Dog   dog1   =  (Dog)  animal ;
 }

🧸instanceof关键字

🎇概念:
instanceof用于判断是否为指定关系(即父类对象指向子类对象)
例如: animal instanceof Dog
表达式结果为布尔类型返回true

🧸final关键字

相当于定义常量:不能被再次修改
在这里插入图片描述
在这里插入图片描述

🧸接口

在这里插入图片描述

接口的定义和使用

🎇概念
可以看做是一个比较纯正的抽象类,作为设计层面使用的,用来·定义·功能(方法),具体实现交给具体的类
在这里插入图片描述
🎇语法规范
使用 interface 关键字用来声明一个接口。
在这里插入图片描述
🎇接口的使用
类使用implements关键字实现接口。
在类声明lmplements关键字放在class声明后面。
在这里插入图片描述
在这里插入图片描述
🎇接口结构
在这里插入图片描述
🎇 接口的特性
• 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字
• 接口中方法可以是抽象的,静态的,默认的
• 接口中声明的属性默认为 public static final 的
• 接口不是被类继承了,而是要被类实现
• 接口不能实例化对象
• 与继承关系类似,接口与实现类之间存在多态性
• 一个接口能继承其它多个接口
• 当类实现接口的时候,类要实现接口中所有的抽象方法。否则,类必须声明为抽象的类

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

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

相关文章

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.14 平移、旋转、缩放

本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV1te4y1L7Mu 本节讲解平移、旋转、缩放这些变换操作 1. 关联信号槽 首先,在 widget.cpp 的构造中,为 “变换” 复选框,关联信号槽 // 平移、旋转、缩放 conn…

leetcode 2439. 最小化数组中的最大值

给你一个下标从 0 开始的数组 nums &#xff0c;它含有 n 个非负整数。 每一步操作中&#xff0c;你需要&#xff1a; 选择一个满足 1 < i < n 的整数 i &#xff0c;且 nums[i] > 0 。将 nums[i] 减 1 。将 nums[i - 1] 加 1 。 你可以对数组执行 任意 次上述操作&…

程序的环境与预处理 程序的编译与链接

目录 1.程序的翻译环境和执行环境 ​编辑 2.编译链接 运行环境 3.预处理 预定义符号 #define #与## 带副作用的宏参数 宏和函数的对比 命名约定 ​编辑 #undef​编辑 命令行定义 ​编辑 条件编译 文件包含 嵌套文件包含 4.其他预处理指令 1.程序的翻译环境和…

新年伊始,和大家聊聊鲜枣课堂的未来

大家好&#xff0c;我是小枣君。时间过得很快&#xff0c;转眼之间&#xff0c;2022年已经结束了。回首这一年&#xff0c;感觉自己一直都在忙&#xff0c;却想不起来到底忙了些什么。这一年&#xff0c;我的生活和工作节奏&#xff0c;一直都是混乱的。这里面&#xff0c;既有…

罗振宇2023“时间的朋友”跨年演讲原版PPT(附下载)

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图清华大学256页PPT元宇宙研究报告.pdf&#xff08;附下载链接&#xff09;…

软件测试[用例篇]

一. 回顾测试用例 1.测试用例基本要素 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素。 2.测试用例好处 测试用例可以提高测试效率&#xff08;可以减…

省时省力,高速收费站无线组网解决方案

一、行业背景随着我国高速公路里程数的不断增加&#xff0c;科技水平的不断进步&#xff0c;智能化的高速公路收费站趋势在不断的加强。例如&#xff1b;高速公路收费站智能备份系统&#xff0c;通常情况下收费站、路段分中心和省联网中心之间是需要传输收费数据记录流水、清账…

【1801. 积压订单中的订单总数】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种&…

关于el-time-picker使用错误的记录

之前在紧急参与一个PC管理后台的项目&#xff0c;项目的基础架子是花裤衩大佬的vue-element-admin()vue2版本),。其中有一个需求是列表数据中数据回显时候&#xff0c;有关时间部分的数据在回显/编辑的情况下&#xff0c;提交时获取的值有问题。虽然后面解决了&#xff0c;但还…

2023年要来了。顺便分享过来后我的学开车经历

你好呀&#xff0c;读者朋友们&#xff01;我是你们的老朋友 zhen guo时光如梭&#xff0c;转眼间我这边再有1个来小时就2023年了&#xff0c;因时差&#xff0c;很多看到这里的读者朋友应该都已经进入2023年。2022年再也回不去了&#xff0c;就像曾经过去的每一年那样&#xf…

【王道操作系统】2.3.1 进程的同步与互斥

进程的同步与互斥 文章目录进程的同步与互斥1.进程同步2.进程互斥1.进程同步 同步也称为直接制约关系在多道程序环境下&#xff0c;进程是并发执行的&#xff0c;不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等&#xff0c;引入了…

IP协议重点总结(附实例)

文章目录前言一、IP地址1.1 概念1.2 作用1.3 格式1.4 组成1.5 分类二、NAT地址转换2.1 作用2.2 转换过程2.3 NAPT端口映射2.4 现实中的栗子&#xff08;以博主的手机为例&#xff09;2.4.1 连无线WLAN的情况2.4.2 用流量上网2.5 NAT的缺陷三、子网掩码3.1 格式3.2 作用3.3 计算…

windows安装IIS服务

安装ASP的环境IIS 1、使用快捷键 【Win X】 打开系统功能菜单&#xff0c;选择【程序和功能】 2、进入【程序和功能】界面管理后&#xff0c;点击【启用或关闭windows功能】。 3、然后保证以下勾选&#xff0c;其他的默认就行&#xff0c;点击确定。如图&#xff1a; 4、出现…

vueJs中的watch与watchEffect函数

前言有时&#xff0c;我们需要在状态变化时执行一些副作用,比如:监听路由状态,更改DOM,或是根据异步操作的结果去修改另一处的状态这个时候,就需要用到监听器在组合式API中,就可以使用watch函数在每次响应式状态发生变化时触发回调函数01使用watch监视refwatch:监听某个属性的变…

2023.01/1801. 积压订单中的订单总数

1801. 积压订单中的订单总数 题意: 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种&#xff1a; 0 表示这是一批采购订单 buy …

3D打印:FDM打印使用CURA4.13.1版本配置

一、前言 今天是2023年1月1日&#xff0c;新年阳历的第一天&#xff0c;在整理CSDN和写年度计划&#xff0c;对2022的总结&#xff0c;就像写一篇博客来分享一下我2022年积累的最多的一项经验&#xff0c;就是使用3D打印机&#xff0c;在2022年我先后入手了3台3d打印机&#x…

聊聊数字化转型是个啥

“国有企业首要的职责&#xff0c;就是实现国有资产保值增值。这是衡量国企工作优劣的关键&#xff01;” ——李克强 如果你开了一家制衣厂&#xff0c;雇佣了10个员工买了10台缝纫机&#xff0c;假设一天可以生产100件衣服。 做老板的你想要提高这家工厂的生产数量&#xff0…

禾元生物冲刺科创板上市:累计亏损超4亿元,贝达药业为主要股东

12月30日&#xff0c;武汉禾元生物科技股份有限公司&#xff08;下称“禾元生物”&#xff09;在上海证券交易所递交招股书&#xff0c;准备在科创板上市。本次冲刺上市&#xff0c;禾元生物计划募资35.02亿元&#xff0c;将用于植物源重组人血清白蛋白产业化基地建设项目、新药…

更多的可能

1986年12月&#xff0c;路遥的《平凡的世界》出版了&#xff0c;1992年11月17日路遥去世了&#xff0c;享年43岁&#xff0c;距今30年了……人的一生常常是白驹过隙&#xff0c;忽然而已&#xff0c;人们也常常用星空里的流星比喻&#xff0c;细细想来&#xff0c;这还算是夸张…

IDEA集成Gitee,超简单

1. 在IDEA下载Gitee插件 file-Settings-Plugins搜索Gitee&#xff0c;并且install这样IDEA就集成了Gitee 2. 从远程仓库拉取项目 如果打开IDEA已经有项目了&#xff0c;那就先file-close退出&#xff0c;回到这个初始化页面VCS&#xff1a;version control system版本控制系…