面向对象编程——抽象类和接口

抽象类的特性:

  1. 抽象类不能直接实例化对象
  2. 抽象方法不能被private、final、static修饰的
  3. 抽象类必须被继承,并且继承后子类必须要重写父类中的抽象方法,否则子类也是抽象类,必须使用abstract修饰
  4. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
  5. 抽象类中可有构造方法,供子类创建对象时,初始化父类的成员变量

解释:

  1. 虽然抽象类不能直接实例化对象,意味着不能像正常类一样可以通过new关键字创建。但是可以通过子类调用抽象类的构造函数进行初始化
  2. private 修饰的成员方法在类外是不能访问的,而抽象方法需要子类进行重写。final修饰的方法甚至不能重写,所以也不行。static 也是一样的道理
  3. 在多重继承关系下,抽象类始终需要一个子类重写抽象方法。比如抽象类A中有抽象方法,并且A为B的父类,但是在B中没有实现A中的抽象方法;这种情况下必须将B设为抽象类,还需要用一个B的子类C重写这个抽象方法

抽象类存在的意义:抽象类存在的意义就是为了被继承,那么普通类也可以被继承,为什么还需要抽象类?
在使用抽象类的时候有许多约束:比如抽象方法必须被重写。在运用多态的时候,一些场景下必须使用子类的,而非父类的;如何不小心误用父类的了,编译器是不会报错的;但是在父类实例化的时候会报错,提前发现问题。这样抽象类就拥有了预防出错的作用。

接口的特性:

  1. 接口中的成员变量默认是public static final、成员方法默认是public abstract;一般情况下不写
  2. 接口当中方法不能在接口中心实现,只能由实现接口的类实现
  3. 注意重写接口中的方法是不能是默认访问权限,因为接口中的方法访问权限是public
  4. 接口中不能有构造方法代码块
  5. 接口不能听过new关键字进行实例化
  6. 一个接口也会产生独立的字节码文件
  7. 在jdk8之后,可以在接口中定义default方法,并且可以有具体实现

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

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

相关文章

Vue3与pywebview获取本地文件夹的绝对路径

1、Vue端 <template><div><button click"selectFolder">选择文件夹</button><button click"showFolder">显示文件夹</button><p>{{ folderPath }}</p></div> </template><script> exp…

一篇文章入门梅尔频率倒谱系数

文章目录 梅尔频率倒谱系数MFCC预处理预加重分帧加窗 FFT&#xff08;Fourier-Transform&#xff09;功率谱滤波器组梅尔频率倒谱系数&#xff08;MFCC&#xff09;均值归一化总结 参考文献 梅尔频率倒谱系数MFCC 梅尔倒谱系数&#xff08;Mel-scale FrequencyCepstral Coeffi…

vue 实现图片预览功能并显示在弹窗的最上方

vue 实现图片预览功能并显示在弹窗的最上方 在 components 下新建一个文件夹 ImagePreview 使用 preview-teleported 来实现图片穿透功能 让预览的图片显示在最上方 代码如下&#xff1a; <template><el-image:src"${realSrc}"fit"cover":sty…

Qt的信号槽机制学习一

一、Qt理论知识简记 &#xff08;一&#xff09;信号与槽[1] 信号与槽是Qt编程的基础&#xff0c;其使得处理界面上各个组件的交互操作变得比较直观和简单&#xff0c;GUI&#xff08;Graphical User Interface&#xff09;程序设计的主要工作就是对界面上各组件的信号进行相应…

程序员的相亲囧途:三万相亲费,能否换回真爱?

在快节奏的都市生活中&#xff0c;相亲已成为不少单身男女寻找另一半的重要途径。然而&#xff0c;宁波的唐先生却在这条路上遭遇了不小的挫折。28岁的他&#xff0c;身高1米78&#xff0c;本应是相亲市场上的“香饽饽”&#xff0c;却在“我主良缘”交了三万块钱相亲费后&…

【Android】使用TextView实现按钮开关代替Switch开关

介绍 Android 本身自己带的有开关控件&#xff0c;但是很多时候我们是不愿意使用这种开关的&#xff0c;感觉使用起来比较麻烦&#xff0c;特别是遇到需要延迟操作的情况。 比如有一个需求是这样的&#xff1a;我们需要打开一个设置&#xff0c;但是这个设置是否打开需要经过…

关于Java中**optional,stream,lambda**

关于Java中optional&#xff0c;stream&#xff0c;lambda Lambda表达式高效使用 // 1. 结合Comparator进行排序 List<Person> persons Arrays.asList(new Person("John", 25),new Person("Alice", 22),new Person("Bob", 30) );// 按年…

Soanrquber集成Gitlab 之 导入Gitlab项目

集成Gitlab 之 导入Gitlab项目 说明&#xff1a; Sonarquber里面的项目&#xff0c;顺便设置&#xff0c;只要在集成CI的时候&#xff0c;使用这个项目的项目标识即可。 当然项目名称一一对应是最好的了&#xff0c;所以这里讲导入Gitlab的项目&#xff0c;项目名称一一对应&…

AI自媒体变现路径大盘点!建议收藏!

当下的我做为一人公司或者超级个体为目标的创业模式&#xff0c;无论是在写作、图文和短视频输出方面&#xff0c;我都是运用了N个AI工具来提升我的生产力。 这种创业模式就是一个人N个AI的模式&#xff0c;我们可以通过AI工具做提效来赚取差价&#xff0c;以时间复利来累计财…

SQL 数据汇总与透视的实用案例

SQL 数据汇总与透视的实用案例 一、前言1. 案例背景2. 数据准备3. 数据透视4. 主查询整合数据5. 结果分析 二、总结 一、前言 在数据分析和报表生成中&#xff0c;SQL 查询的灵活性和强大功能使其成为不可或缺的工具。在许多实际场景中&#xff0c;我们需要从复杂的数据集中提…

Python的协程与传统的线程相比,是否能更有效地利用计算资源?在多大程度上,这种效率是可测量的?如何量化Python协程的优势|协程|线程|性能优化

目录 1. 协程与线程的基本概念 1.1 线程 1.2 协程 2. 协程的实现原理 2.1 基本示例 3. 协程与线程的效率对比 3.1 资源利用率 3.2 性能测试 4. 使用场景分析 4.1 适用场景 4.2 不适用场景 5. 性能监测与测量 5.1 使用时间记录 5.2 使用第三方库 6. 总结与展望 P…

自然语言处理领域中的两个主要技术挑战:实体歧义和上下文管理

自然语言处理领域中的两个主要技术挑战&#xff1a;实体歧义和上下文管理 这段话详尽地讨论了在自然语言处理领域中的两个主要技术挑战&#xff1a;实体歧义和上下文管理。具体地&#xff0c;它解释了如何识别并解决在同一句子中相同日期和地点被赋予多种不同含义的问题。此处…

服务器文件访问协议

服务器文件访问协议 摘要NFS、CIFS、SMB概述SMBWindows SMBLinux SambaPython SMB NFS 摘要 本篇博客参考网上文档和博客&#xff0c;对基于网络的服务器/主机的文件访问、共享协议进行简要总结&#xff0c;完整内容将会不断更新&#xff0c;以便加深理解和记忆 NFS、CIFS、S…

python通过translate库实现中英文翻译

功能介绍 translate库&#xff0c;可以轻松实现中英文的翻译。 使用pip直接安装translate库&#xff1a;pip install translate translate库github地址 命令行直接调用 当使用pip安装以后&#xff0c;就得到了translate-cli的命令&#xff0c;此时可以通过该命令直接实现翻…

docker占用磁盘过多问题

我在windows系统上用docker&#xff0c;安装在C盘环境下&#xff0c;我发现C盘占用了大量的空间&#xff0c;查找后发现是docker的映像文件占用的&#xff0c;于是开始清理&#xff0c;中间还踩个坑&#xff0c;记录一下&#xff0c;下次需要的时候方便找。 踩坑 我本想移动映…

HarmonyOS:@Watch装饰器:状态变量更改通知

Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 说明 从API version 9开始&#xff0c;该装饰器支持在ArkTS卡片中使用。 从API version 11开始&#xff0c;该装饰器支持在元服务中使用。 一、概…

SQL PRIMARY KEY

SQL PRIMARY KEY 概述 在关系型数据库中&#xff0c;主键&#xff08;PRIMARY KEY&#xff09;是一个非常重要的概念。它是表中每一行数据的唯一标识符&#xff0c;用于保证数据的完整性和准确性。本文将详细介绍SQL中的主键&#xff0c;包括其定义、作用、如何创建和修改主键…

模版标签示例

通用数据 {$website_dictionary.CONTACT_PHONE} {$website_dictionary.CONTACT_TEL} {$website_dictionary.CONTACT_400} {$website_dictionary.CONTACT_EMAIL} {$website_dictionary.CONTACT_ADDRESS}头部菜单 header.html {notempty name"menu"}<!-- 一级 --&…

【Qt】控件——布局管理器、常见的布局管理器、布局管理器的使用、垂直布局、水平布局、网格布局、表单布局、Spacer

文章目录 Qt布局管理器垂直布局水平布局网格布局表单布局Spacer Qt 布局管理器 之前在使用 Qt 创建界面上的控件时&#xff0c;大多是通过 “绝对定位” 的方式来设定的。即每个控件所在的位置都需要计算坐标&#xff0c;最终通过 setGeometry 或者 move 方式进行摆放。 然而&a…

配置和排查 Lombok 在 IDEA 中使用的详细步骤

在日常开发中&#xff0c;Java 代码常常需要大量的样板代码&#xff0c;比如 getter、setter、toString 等方法。Lombok 是一个 Java 库&#xff0c;可以通过注解的方式&#xff0c;自动生成这些常见的代码&#xff0c;从而让代码更加简洁、清晰。比如&#xff0c;我们可以通过…