java_抽象类和接口

1.抽象类:

1.抽象类之所以被称为抽象类,就是因为它包含有抽象方法,只要含有抽象方法的类就叫抽象类。

2.抽象类中可以没有抽象方法,也可以抽象方法和非抽象方法共存。

3.抽象类和类一样是单继承的。

4.抽象类中可以存在普通的成员变量。

5.在Java中,我们通过abstract来定义抽象类:

2.接口:

1.接口中的方法在JDK8之前只能是抽象的,JDK8版本开始,接口中可以包含default方法。

2.接口可以实现多个父接口。

3.接口中的变量必须是static final类型,并被初始化。

4.通过interface关键字来定义接口:

5.default方法:

6.为什么引入default方法:

答:使用接口,使得我们可以面向抽象编程,但是其中一个缺点就是当接口中有改动的时候,需要修改所有的实现类。

在JDK8中,为了给已经存在的接口增加新的方法并且不影响已有的实现,所以引入了接口中的默认方法实现。

默认方法允许在不打破现有继承体系的基础上改进接口,解决了接口的修改与现有的实现不兼容的问题。

注意:

该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()、parallelStream()、forEach()和removeIf()等等。

在我们实际开发中,接口的默认方法应该谨慎使用,因为在复杂的继承体系中,默认方法可能引起歧义和编译错误。

3.接口的作用:

接口最主要的作用是达到统一访问,就是在创建对象的时候用接口创建。

【接口名】 【对象名】= new 【实现接口的类】,这样你用哪个类的对象就可以new哪个对象了,不需要改原来的代码。

4.再看接口的特点:

1.Java接口中的成员变量默认都是public static final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用”_”分隔)。

2.Java接口中的方法默认都是public abstract类型的(都可省略),没有方法体,不能被实例化。

3.接口中没有构造方法,不能被实例化。

4.一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口。

5.Java接口必须通过类来实现它的抽象方法。

6.当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类。

7.不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量的引用是实现了这个接口的类的实例。接口名 对象名 = new 实现接口的类()。

8.一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承。

5.接口和抽象类的使用场景:

当需要定义一些抽象方法而不需要其余额外的具体方法或者变量的时候, 我们可以使用接口。

反之,则需要使用抽象类,因为抽象类中可以有非抽象方法和变量。

Original: https://www.cnblogs.com/pfzhang18/p/16115274.html
Author: 2022年总冠军gogogo
Title: java_抽象类和接口

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/571241/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • activit 表结构 flowable也大体适用

    1、结构设计 1.1、 逻辑结构设计 Activiti使用到的表都是ACT_开头的。 ACT_RE_*: ‘RE’表示repository(存储),Repo…

    Java 2023年6月7日
    081
  • springboot中bean注入失败的四种原因

    1、被注入的对象没有被spring扫描到,此时需要添加对应的包扫描路径。 @ComponentScan 2、需要自动注入的对象不是spring加载,而是new的方式创建 需要自动注…

    Java 2023年6月7日
    074
  • Java8新特性之Stream–Stream方法

    Stream主要有以下几种方法: 遍历/匹配(foreach/find/match)筛选(filter)聚合(max/min/count)映射(map/flatMap)归约(red…

    Java 2023年5月29日
    085
  • [研究]SpringBoot-MybatisPlus-Dynamic(多数据源)

    特性 1. 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 2. 支持数据库敏感配置信息 加密 ENC()。 3. 支持每个数据库独立初始化表结构sc…

    Java 2023年6月9日
    082
  • Jenkins + SpringCloud(多模块)+ Vue系统详细构建配置

    前言 随着Docker、K8S、服务网格(ServiceMesh)等新型部署管理方式的兴起,Jenkins等工具已逐渐是CI/CD的较为过时的管理方式,但是对于中小型开发团队且系统…

    Java 2023年6月13日
    067
  • 【C#】TreeView 数据多加载慢的问题 IsVirtualizing

    在 WPF中TreeView数据列表过大,加载速度很慢,可以在前端Xaml中增加一行: VirtualizingPanel.IsVirtualizing="True&qu…

    Java 2023年5月29日
    087
  • springboot整合activity

    地址:https://blog.csdn.net/apm800/article/details/106112994 此博客只是为了记忆相关知识点,大部分为网络上的文章,在此向各个文…

    Java 2023年5月30日
    076
  • vnpy源码阅读学习(7):串在一起

    串在一起 我们已经分析了UI、MainEngine、EventEngine。然后他们几个是如何发挥作用的呢?我总结了一张图: 我们来具体的看看UI部分是如何跟EventEngine…

    Java 2023年6月7日
    041
  • arthas监控elasticsearch(7.x)

    arthas介绍 arthas是Alibaba推出的java诊断工具 官方文档 准备 准备docker环境 name port centos_arthas 3658:3658 do…

    Java 2023年6月8日
    091
  • Mycat windos版(详细步骤)

    第一步:mycat下载 先下载一个运行环境框架包。 下载地址: http://dl.mycat.org.cn/2.0/install-template/ 我下载的版本:(mycat…

    Java 2023年6月5日
    0118
  • Java基础问题

    基础问题 谈谈你对面向对象的理解 — 结合场景 为何要使用对象编程? 可重复利用,方便拓展 面向对象有三大特征:封装、继承和多态 封装:为什么要封装?可以使类的 成员(…

    Java 2023年6月7日
    072
  • 从零开始实现放置游戏(十六)——道具系统(1)道具字典

    道具系统是游戏的核心系统之一,常见的业务功能包括 “角色背包”, “道具商店”, “怪物掉落” 等,都依赖道…

    Java 2023年6月5日
    078
  • Redis常用数据结构及应用场景

    1. 概述 Redis 一个开源的基于键值对(Key-Value)NoSQL 数据库。使用 ANSIC 语言编写、支持网络、基于内存但支持持久化。性能优秀,并提供多种语言的 API…

    Java 2023年6月5日
    073
  • 语法糖甜不甜?巧用枚举实现“状态”转换限制

    语法糖 语法糖(Syntactic sugar),也被译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语…

    Java 2023年6月5日
    089
  • 2022.1.6 时间复杂度及简单排序算法

    2022.1.6 时间复杂度及简单排序算法 1. 时间复杂度 定义:在常数操作数量的表达式中,除去低阶项和高阶项的系数所剩下来的东西,记作O(剩下),读作 big O(剩下),时间…

    Java 2023年6月13日
    086
  • Redis做Mybatis的二级缓存

    基于spring boot项目的前提下,使用redis数据库做mybatis的二级缓存。 Redis做mybatis的二级缓存 作用提升速度,保证多台服务器访问同一数据库时不会崩注…

    Java 2023年6月14日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球