Java(四)(多态,final,常量,抽象类,接口)

news2024/10/3 8:30:34

目录

多态

基本概念:

使用多态的好处

类型转换

遇到的问题

解决方法

强制类型转换的一个注意事项

final

常量

抽象类

啥是个抽象类?

抽象类的注意事项,特点

抽象类的场景和好处

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

接口

基本概念

接口的好处

JDK8开始,接口新增了三种形式的方法:

接口的多继承


多态

基本概念:

什么是多态:多态在继承/实现情况下的一种现象,表现为: 对象多态、行为多态

咱们来举出一个现实中的一个例子来解释对象多态和行为多态是个啥东西:

对象多态:你是你父母的儿子,是老师的学生,我们每个人会有不同的角色,这个就是生活中的对象多态

行为多态: 我们每个人都会跑,但是有人跑的慢,有的人跑的快,同一种行为会有不同的表现形式,这就是我们说的行为多态

多态的代码实现:

多态的识别技巧:编译看左边,运行看右边

多态的前提: 有继承/实现关系; 存在父类引用子类对象;存在方法重写

有一点需要注意: 多态是对象、行为的多态,Java中的属性(成员变量)不太多态

使用多态的好处

在多态形式下,右边对象是解耦合的,更便于扩展和维护

定义方法的时,使用父类类型的形参,可以接收一切子类对象,扩展性更强,更便利

上面的意思就是我们现在要体测,老师和学生都要参加,我们在体测这个方法中设置形参的时候,设置父类People数据类型就行了,就可以接收他所有的子类对象

类型转换

遇到的问题

多态中有个问题就是对象是不能调用子类中的私有方法的

解决方法

自动类型转换: 父类  变量名 = new 子类()

强制类型转换: 子类 变量名 = (子类) 父类变量

强制类型转换的一个注意事项

存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错

运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来

正确形式

错误形式

强制转换类型的时候,Java建议我们要进行instanceof来进行判断

final

final关键字是最终的意思,可以修饰(类,方法,变量)

修饰类: 该类被称为最终类,特点是不能被继承了

修饰方法:该方法被称为最终方法,特点是不能被重写了

修饰变量: 该变量只能被赋值一次(变量: (1) 局部变量(2)成员变量 : 静态成员变量和实例成员变量)

常量

使用static final 修饰的成员变量就被称为常量

作用: 通常用于记录系统中的配置

抽象类

抽象类是不能定义对象的,假如说我有一个抽象类为A , A a = new A();这样会报错的

Java中有一个关键字叫: abstract,他是抽象的意思,可以用它修饰类,成员方法

abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法

啥是个抽象类?

抽象类的注意事项,特点

1.

2.类该有的变量(成员变量,方法,构造器)抽象类都可以有

3.抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现

4.子类中的方法必须重写,否则他也是一个抽象类,用abstract来修饰

抽象类的场景和好处

父类知道每个子类都要做某一个行为,但每个子类都做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态(对象多态和行为多态)(很重要呀,知道好处了,就能深刻理解这东西了)

我们来举个例子来看看

假如说我现在有需求,某宠物游戏,需要管理猫,狗的数据。猫的数据有;名字,行为是:喵喵喵的叫~,

狗的数据有:名字,行为是: 汪汪汪的叫~,请用面向对象编程设计该程序

思路: 因为我们看见这个猫和狗都有名字,我们可以将猫和狗定义一个父类Animal,父类中写一个成员变量,来存放名字,可以将Animal设置成抽象类,然后子类来实现这个方法重写

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

接口

基本概念

语法:

另外说明一点: 接口中是不存在构造器啥的,只有我上面写的两种东西

因为这个是抽象类的有抽象方法,所以是不能创建A类对象的

注意: 接口不能创建对象,接口是用来被类实现的,实现接口的类称为实现类

上面是我们实现的两个接口,下面是我们的实现类,一个实现类可以有多个接口(可以理解成干爹),,实现类实现多个接口,必须重写全部接口的全部抽象方法,否则实现类需要定义成抽象类

接口的好处

弥补了类单继承的不足,一个类可以同时有多个接口

JDK8开始,接口新增了三种形式的方法:


public interface A {
    /**
     * 1.默认方法(实例方法):使用default修饰,默认会被加上public修饰,注意,只能使用接口的实现类对象调用
     * 默认是public方法修饰的
     */
    default void test1()
    {
        System.out.println("这是默认方法");
        test2();
    }
    /**
     * 私有方法:必须用private修饰(jdk9才开始支持)
     */
    private void test2()
    {

    }

    /**
     * 类方法(静态方法):调用static修饰,默认会被加上public修饰,注意:只能用接口来调用
     */
    static void test3()
    {

    }
}

接口的多继承

一个接口可以同时继承多个接口

public interface C extends B,A{

}

注意事项:如果继承的多个接口冲突,就像下面这样,I和J中都有test1方法,但是一个有返回值,一个没有返回值,则就不支持多继承了

 当一个子类既继承了父类,又存在接口,我们可以看下面这个图,IT和Fu都有run方法,但是子类会优先调用它父亲的run方法

 

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

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

相关文章

Java之API(上)

前言: 这一次内容主要是围绕Java开发中的一些常用类,然后主要是去学习这些类里面的方法。 一、高级API: (1)介绍:API指的是应用程序编程接口,API可以让编程变得更加方便简单。Java也提供了大量API供程序开发者使用&…

【华为OD题库-032】数字游戏-java

题目 小明玩一个游戏。系统发1n张牌,每张牌上有一个整数。第一张给小明,后n张按照发牌顺序排成连续的一行。需要小明判断,后n张牌中,是否存在连续的若干张牌,其和可以整除小明手中牌上的数字. 输入描述: 输入数据有多组…

NLP学习

参考:NLP发展之路I - 从词袋模型到Transformer - 知乎 (zhihu.com) NLP大致的发展历史。从最开始的词袋模型,到RNN,到Transformers和BERT,再到ChatGPT,NLP经历了一段不断精进的发展道路。数据驱动和不断完善的端到端的…

逻辑漏洞(业务逻辑)dami CMS

逻辑漏洞(业务支付逻辑漏洞)dami CMS 0x01 业务逻辑简介 业务逻辑指的是一个系统或应用程序中的实际业务规则和流程。它描述了如何处理特定的业务需求、数据和操作。业务逻辑通常是根据特定行业或组织的需求而设计的。 在软件开发中,业务逻…

Matplotlib颜色条的配置_Python数据分析与可视化

Matplotlib颜色条配置 基本颜色颜色条选择配色方案颜色条刻度的限制与扩展功能的设置离散型颜色条 基本颜色 Matplotlib提供了8种指定颜色的方法: 在[0,1]中的浮点值的RGB或RGBA元组(例如 (0.1, 0.2, 0.5) 或(0.1, 0.…

MacOS 成为恶意软件活动的目标

Malwarebytes 警告称,一个针对 Mac 操作系统 (OS) 的数据窃取程序正在通过虚假的网络浏览器更新分发给毫无戒心的目标。 Atomic Stealer,也称为 AMOS,是 Mac OS 上流行的窃取程序。 Atomic Stealer (AMOS) 恶意软件最近被发现使用“ClearFa…

使用websocket获取thingsboard设备的实时数据

背景 有一个读者前来咨询,如何实时获取设备的遥测数据。 其实tb是有提供websocket接口来获取设备数据的。而且还支持js跨域调用。下面给大家演示一下。 websocket地址 完整代码 <!DOCTYPE HTML> <html><h

2023亚太杯数学建模赛题人工精准翻译

大家好&#xff0c;亚太杯今天早上6点已经开赛啦&#xff0c;然后我在这里给大家带来赛题的精准人工翻译&#xff0c;防止大家直接用软件翻译导致某些地方乱码或者翻译不精准&#xff0c;这会导致后续做题过程出现很大偏差。 注意&#xff0c;以下翻译均免费发放word形式的哈&…

自学成为android framework高手需要准备哪些装备-千里马车载车机系统开发学习

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;经常有很多学员买课同学都会问到需要准备哪些装备&#xff0c;我也回答了很多学员了&#xff0c;今天就搞一篇文章来统一说明一下&#xff0c;告诉一下大家如果你想从一个framework新手变成一个framework开发的高…

【精选】CSS入门必看知识点大合集

CSS简介 CSS概念 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表&#xff0c;又叫级联样式表&#xff0c;简称样式表 CSS文件后缀名为.css CSS用于HTML文档中元素样式的定义 为什么需要CSS 使用css的唯一目的就是让网页具有美观一致的页面 语法 CSS 规则…

VS Code 如何搭建C/C++环境

目录 一、VS Code是什么&#xff1f; 二、VS Code下载和安装 2.1下载 2.2安装 2.3环境介绍 三、Vs Code配置C/C环境 3.1下载和配置MinGW-w64编译器套件 3.1.1下载 3.1.2配置 一、VS Code是什么&#xff1f; 跨平台&#xff0c;免费且开源的现代轻量级代码编辑器 Vis…

vivado产生报告阅读分析15-时序报告11

Report Clock Domain Crossings “ Clock Domain Crossings (CDC) ” &#xff08; 时钟域交汇 &#xff09; 报告可对设计中的时钟域交汇执行结构分析。此信息可用于识别潜在不安全的 CDC &#xff0c; 此类 CDC 可能导致亚稳态或数据一致性问题。虽然 CDC 报告与“ Clock …

C#,数值计算——插值和外推,多项式插值与外推插值(Poly_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 多项式插值与外推插值 /// Polynomial Interpolation and /// Extrapolation interpolation routines for one dimension /// </summary> public class Poly…

Rust错误处理:Result

文章目录 简介错误匹配 Rust基础教程&#xff1a; 初步⚙ 所有权⚙ 结构体和枚举类⚙ 函数进阶⚙ 泛型和特征⚙ 并发和线程通信⚙ cargo包管理⚙ 可空类型Option Rust进阶教程&#xff1a; 用宏实现参数可变的函数⚙ 类函数宏 简介 Rust中没有提供类似try…catch之类…

排序算法--希尔排序

实现逻辑 ① 先取一个小于n的整数d1作为第一个增量&#xff0c;把文件的全部记录分成d1个组。 ② 所有距离为d1的倍数的记录放在同一个组中&#xff0c;在各组内进行直接插入排序。 ③ 取第二个增量d2小于d1重复上述的分组和排序&#xff0c;直至所取的增量dt1(dt小于dt-l小于……

2023 年 亚太赛 APMCM (B题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 问题一&#xff1a; 建立没有作物的玻璃温室内的温度和风速分…

【每日OJ —— 20.有效的括号(栈)】

每日OJ —— 20.有效的括号&#xff08;栈&#xff09; 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09;2.方法讲解2.1.解法2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09; 2.方法讲解 2.1.解法 利用…

Mysql中正则表达式Regexp常见用法

Mysql中正则表达式Regexp常见用法_regexp不包含-CSDN博客

设计模式——RBAC 模型详解

1.什么是 RBAC 呢&#xff1f; RBAC 即基于角色的权限访问控制&#xff08;Role-Based Access Control&#xff09;。这是一种通过角色关联权限&#xff0c;角色同时又关联用户的授权方式。 简单地说&#xff1a;一个用户可以拥有若干角色&#xff0c;每一个角色又可以被分配…