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.hqwc.cn/news/504809.html

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

相关文章

STM32------分析GPIO寄存器

一、初始LED原理图 共阴极led LED发光二极管,需要有电流通过才能点亮,当有电压差就会产生电流 二极管两端的电压差超过2.7v就会有电流通过 电阻的作用 由于公式IV/R 不加电阻容易造成瞬间电流无穷大 发光二极管工作电流为10-20MA 3.3v / 1kΩ 3.…

【风格迁移】URST:解决超高分辨率图像的风格迁移问题

URST:解决超高分辨率图像的风格迁移问题 提出背景URST框架的整体架构 提出背景 论文:https://arxiv.org/pdf/2103.11784.pdf 代码:https://github.com/czczup/URST?v1 有一张高分辨率的风景照片,分辨率为1000010000像素&#…

枚举类、泛型、API

枚举类 枚举类可以实现单例设计模式。 枚举的常见应用场景:用来表示一组信息,然后作为参数进行传输。 泛型 API

Benchmark学习笔记

小记一篇Benchmark的学习笔记 1.什么是benchmark 在维基百科中,是这样子讲的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…

Onlyfans怎么绑定虚拟卡订阅,视频图文教学!!!

前言 onlyfans软件是一个创立于2016年的订阅式社交媒体平台,创作者可以在自己的账号发布原创的照片或视频,并需要注意的是,网络上可能存在非法或不道德的应用将其设置成付费模式,若用户想查看则需要每月交费订阅。 图文视频教学&a…

steam++加速问题:出现显示443端口被 vmware-hostd(9860)占用的错误。

目录 前言: 正文: 前言: 使用Steam对GitHub进行加速处理时,建议使用2.8.6版本。 下载地址如下:Release 2.8.6 BeyondDimension/SteamTools GitHub 下载时注意自己的系统位数 正文: 使用GitHub时会使…

RocketMQ学习笔记一

课程来源:002-MQ简介_哔哩哔哩_bilibili (尚硅谷老雷,时长19h) 第1章 RocketMQ概述 1. MQ是什么? 2. MQ用途有哪些? 限流削峰;异步解耦;数据收集。 3. 常见MQ产品有哪些&对比…

如何根据PalWorldSettings.ini重新生成定制的WorldOption.sav文件?

这个过程涉及到将PalWorldSettings.ini 文件中的设置与WorldOption.sav 文件进行匹配和替换。具体的操作步骤可能包括检查PalWorldSettings.ini 文件中的设置是否与WorldOption.sav 文件中的设置相匹配,然后根据这些设置重新生成或修改WorldOption.sav 文件&#xf…

还在用Jenkins?快来试试这款简而轻的自动部署软件!

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具,完全可以满足个人以及一些小企业的需求,分享一下。 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中,Jpom 可以解决下面这些…

深入了解Java虚拟机(JVM)

Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释执行Java字节码,并在各种平台上执行。JVM的设计使得Java具有跨平台性,开发人员只需编写一次代码,就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

简易内存池2 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 请实现一个简易内存池,根据请求命令完成内存分配和释放。 内存池支持两种操作命令,REQUEST和RELEASE,其格式为: REQUEST请求的内存大小 …

每个人都应该知道的AI大模型:通往智能未来的桥梁

人工智能大模型已成为我们通往智能未来的桥梁。这些模型,如OpenAI的GPT-4,不仅是技术的巅峰,更是人类智慧的结晶。在这篇文章中,我们将深入探讨AI大模型的重要性,它们是如何工作的,以及它们对社会的潜在影响…