JAVA面向对象高级部分—多态

面向对象高级部分—多态

认识多态

对象多态,对象既可以指向老师对象,也可以指向学生对象。
在这里插入图片描述
注意事项:
成员变量不谈多态,编译看左边,运行看左边
成员变量编译的是父类People,所以编译的是左边的People,运行也看左边(输出的People的成员变量值)
在这里插入图片描述

代码示例

在这里插入图片描述
对象多态和行为多态的输出结果,编译看左边,运行看右边
编译看左边(People),运行结果看右边(new的Teacher()类和Student()类)
在这里插入图片描述

使用多态的好处

在这里插入图片描述

优点代码示例

希望所有学生和老师一起参加比赛,多累的
在这里插入图片描述

弊端

无法直接调用子类的独有功能
在这里插入图片描述

多态下的类型转换问题

在这里插入图片描述

解决上一节中多态的弊端—无法调用子类特有方法

强制转换前报错
正常情况下父类无法转为子类,不能用子类构造父类的对象,会报错,如下:
在这里插入图片描述

强制转换的方法

强制类型转换方法
alt+回车键,点击红框进行强制转换
在这里插入图片描述
强制转换结果如下
在这里插入图片描述

强制转换存在的问题

在这里插入图片描述

在这里插入图片描述

instanceof关键字

instanceof关键字使用语法:p-对象名,Student—需要进行判断的类名
强制转换前进行当前对象的真实类型判断,再进行强制转换,避免出现强制转换的类型报错,代码示例如下:

在这里插入图片描述

总结

在这里插入图片描述

final

认识final

在这里插入图片描述
变量存储的地址不能改变,但地址所指向对象的内容可以改变
在这里插入图片描述

代码示例

工具类一般会加上final
1)修饰变量:只能赋值一次
修饰成员变量
在这里插入图片描述
修饰成员变量(静态成员变量)
在这里插入图片描述

补充知识:常量详解

在这里插入图片描述
static final 修饰的成员变量被称为常量
代码示例
在这里插入图片描述

抽象类

认识抽象类

代码示例
在这里插入图片描述
错误示例
有方法体会报错
在这里插入图片描述

抽象类的注意事项、特点

在这里插入图片描述

1)不能创建对象
(因为抽象类的方法没有方法体,无法访问抽象类的方法)
在这里插入图片描述
2)作为一个特殊的父类,给子类用
在这里插入图片描述

总结

在这里插入图片描述

使用抽象类的好处

每个子类都要重写父类的方法
在这里插入图片描述
代码示例
在这里插入图片描述

抽象类的常见场景:模板方法设计模式

在这里插入图片描述

解决了什么问题

减少重复代码
在这里插入图片描述

代码示例
在这里插入图片描述

使用final关键字

模板方法中使用final关键字,防止被重写
在这里插入图片描述

接口

接口概述

认识接口

接口中不能有构造器和创造对象。
在这里插入图片描述

1)成员常量(成员名最好大写)

在这里插入图片描述
在这里插入图片描述

2)成员方法

成员方法不能有方法体
在这里插入图片描述

接口的基本使用

接口支持实现多个接口,类只能继承一个类。
在这里插入图片描述

代码示例
在这里插入图片描述

接口的好处

1)弥补类的继承不足,子类继承父类的同时,还能实现多个接口。
A要重写接口的所有方法。
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

接口的综合案例

在这里插入图片描述

接口的其他细节:JDK8开始,接口中新增的三种方法

原来的接口中只能定义一些常量和成员抽象方法,有了这三个新增方法后,接口内的方法可以有方法体了。
在这里插入图片描述

1、默认方法使用default修饰

在这里插入图片描述
2、私有方法,必须使用private修饰
在这里插入图片描述
接口外部不能直接访问
在这里插入图片描述
接口内部方法可以直接访问
在这里插入图片描述
3、静态方法:必须使用static修饰,默认会被public修饰
在这里插入图片描述

总结

在这里插入图片描述

接口的其他细节:接口的多继承、使用接口的注意事项

在这里插入图片描述

接口的多继承
在这里插入图片描述
接口的注意事项(了解)
在这里插入图片描述

1)被继承的接口中,存在方法名冲突,则不支持多继承
在这里插入图片描述
2)方法名冲突,优先使用父类
继承放在接口实现前面
在这里插入图片描述
3)一个类实现了多个接口,若多个接口中存在同名的默认方法,可以不冲突,这个类重写方法即可
在这里插入图片描述

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

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

相关文章

Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析

3.2.3 原理分析 3.2.3.1 源码跟踪 前面我们讲解了在项目当中引入第三方依赖之后,如何加载第三方依赖中定义好的bean对象以及配置类,从而完成自动配置操作。那下面我们通过源码跟踪的形式来剖析下SpringBoot底层到底是如何完成自动配置的。 源码跟踪技巧…

【README 小技巧】 展示gitee中开源项目start

【README 小技巧】 展示gitee中开源项目start <a target"_blank" hrefhttps://gitee.com/wujiawei1207537021/wu-framework-parent><img srchttps://gitee.com/wujiawei1207537021/wu-framework-parent/badge/star.svg altGitee star/></a>

在VMware中安装CentOS 7并配置Docker

VMware安装CentOS 7 一、介绍 该文章介绍如何使用启动U盘在虚拟机里面安装系统&#xff0c;虚拟机版本为VMware Workstation 16 pro&#xff0c;Linux版本为CentOS Linux release 7.9.2009 (Core)。 二、安装 1、创建虚拟机 点击创建新的虚拟机 选择典型就可以了&#xf…

YOLO算法

YOLO介绍 YOLO&#xff0c;全称为You Only Look Once: Unified, Real-Time Object Detection&#xff0c;是一种实时目标检测算法。目标检测是计算机视觉领域的一个重要任务&#xff0c;它不仅需要识别图像中的物体类别&#xff0c;还需要确定它们的位置。与分类任务只关注对…

2024年最新腾讯云学生专属的服务器优惠活动申请流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

HarmonyOS Full SDK的安装

OpenHarmony的应用开发工具HUAWEI DevEco Studio现在随着OpenHarmony版本发布而发布,只能在版本发布说明中下载,例如最新版本的OpenHarmony 4.0 Release。对应的需要下载DevEco Studio 4.0 Release,如下图。 图片 下载Full SDK主要有两种方式,一种是通过DevEco Studio下载…

babylonjs入门-自由相机 FreeCamera

基于babylonjs封装的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 欢迎加群&#xff08;点击群号传送&#xff09;&#xff1a;464146715 官方文档 中文文档 案例传送门 懒得打字 粘贴复制 一气呵成 ​

【黑马程序员】4、TypeScript高级类型_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址&#xff1a;【黑马程序员前端TypeScript教程&#xff0c;TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 4、TypeScript高级类型 4.1 class类 4…

双周回顾#005 - 零

一件悲伤的事实&#xff0c;这两周&#xff0c;成长值为零&#xff5e;&#xff5e; 从大数据部门临时抽调到互联网部门&#xff0c;支援重构的“配置下单”项目。 一个变种的低代码架构设计&#xff0c;唯一比较有意思的是它的业务组件的设计与校验设计&#xff0c;算是学习…

百度SEO快排原理是什么?如何快速排名方法?

前言&#xff1a;我之前说过我不打算写这个快速排序。 首先&#xff0c;我从来没有在自己的网站上操作过所谓的快速排序。 其次&#xff0c;我不能像网上很多人写的那样透露百度快速排序的秘密&#xff08;说实话&#xff0c;你可以透露秘密&#xff09;。 方法是有了&#xff…

React富文本编辑器开发(三)

现在我们的编辑器显示的内容很单一&#xff0c;这自然不是我们的目标&#xff0c;让呈现的内容多元化是我们的追求。这就需要让编辑器能够接收多元素的定义。从初始数据的定义我们可以推断数据的格式远不止一种&#xff0c;那么其它类型的数据如何定义及呈现的呢&#xff0c;我…

AutoEncoder和 Denoising AutoEncoder学习笔记

参考&#xff1a; 【1】 https://lilianweng.github.io/posts/2018-08-12-vae/ 写在前面&#xff1a; 只是直觉上的认识&#xff0c;并没有数学推导。后面会写一篇&#xff08;抄&#xff09;大一统文章&#xff08;概率角度理解为什么AE要选择MSE Loss&#xff09; TOC 1 Au…

一次奇怪的事故:机器网络连接打满,导致服务不可用

业务背景 发生事故的业务系统是一个toB业务&#xff0c;业务是服务很多中小企业进行某项公共信息指标查询。系统特点:业务处理相对简单&#xff0c;但是流量大&#xff0c;且对请求响应要求较高&#xff1a; 业务请求峰值qps达50w&#xff0c;平时流量达20w左右。 请求响应时…

前端学习第七天-css常用样式设置

达标要求 掌握元素的显示与隐藏 熟练应用溢出的文字隐藏 熟练掌握版心和布局流程 1. 元素的显示与隐藏 在CSS中有三个显示和隐藏的单词比较常见&#xff0c;我们要区分开&#xff0c;他们分别是 display visibility 和 overflow。 他们的主要目的是让一个元素在页面中消失…

Springboot接口参数校验

在设计接口时我们通常需要对接口中的非法参数做校验&#xff0c;以降低在程序运行时因为一些非法参数而导致程序发生异常的风险&#xff0c;例如登录的时候需要校验用户名密码是否为空&#xff0c;创建用户的时候需要校验邮件、手机号码格式是否准确。如果在代码中对接口参数一…

【Git教程】(三)提交详解 —— add、commit、status、stach命令的说明,提交散列值与历史,多次提交及忽略 ~

Git教程 提交详解 1️⃣ 访问权限与时间戳2️⃣ add命令与 commit 命令3️⃣ 提交散列值4️⃣ 提交历史5️⃣ 一种特别的提交查看方法6️⃣ 同一项目的多部不同历史6.1 部分输出&#xff1a;-n6.2 格式化输出&#xff1a;--format、--oneline6.3 统计修改信息&#xff1a;--st…

Linux内存地址空间

目录 一、虚拟地址空间 1.虚拟地址空间的定义 2.虚拟地址空间的布局 二、内存壁垒 1.内存壁垒的定义​编辑 2.段错误 三、内存映射的建立与解除 &#xff08;1&#xff09;mmap &#xff08;2&#xff09;munmap &#xff08;3&#xff09;堆内存的分配和释放 1.sbrk …

浅析能耗监测系统在大型数据中心的应用

彭姝麟 Acrelpsl 1总体设计 大型数据中心能耗监测系统包含硬件和软件两大部分&#xff0c;其硬件组成主要包括监控服务器、主机设备、网络设备、环境参数传感器、通风模块等&#xff0c;总体采集逻辑采用三级监控体系。一级为主机设备&#xff0c;作为系统的应用层&#xff0c…

【JSON2WEB】06 JSON2WEB前端框架搭建

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 前端技术路线太多了&#xff0c;知识点更多&…

【Maven】Maven 基础教程(一):基础介绍、开发环境配置

《Maven 基础教程》系列&#xff0c;包含以下 3 篇文章&#xff1a; Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置Maven 基础教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基础教程&#xff08;三&#xff09;&#xff1a;b…