首页 > 其他分享 >接口和抽象类详解

接口和抽象类详解

时间:2024-11-08 10:29:54浏览次数:1  
标签:子类 可以 接口 详解 抽象 抽象类 方法

抽象类

特点:
1.抽象类中可以有构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。 抽象方法不能有方法体
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
6.抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰
7.抽象类方法中默认的访问权限jdk1.8之前是protected之后是default
8.抽象类中可以有main方法
9.抽象类中可以有static方法,但是不能有default方法

关键字使用注意:
1.抽象类中的抽象方法(其前有abstract修饰)不能用private、default、static、synchronized、native访问修饰符修饰。 (public和protected可以)
2.外部类的修饰符只能是不写,接口的修饰符只能是不写或者public
3.接口种的变量默认是public static final的,所以接口的成员变量必须赋值。方法默认是public abstract的。
4.抽象类中的非抽象方法可以被重写
5.抽象类可以有构造方法,只是不能实例化
6.抽象类不能多继承

接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有【常量】,因为定义的变量,在编译的时候都会默认加上public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。
7.接口可以继承接口,用extends
8.接口中方法访问修饰符默认是public abstract的,但是JDK1.8之后接口中可以有static方法或者default方法,但是这两种方法必须有方法体。
9.接口中的方法用static修饰之后,就不能用abstract修饰了
10.接口中可以有main方法


在JDK1.8之前的版本(不包括JDK1.8),接口中不能有静态方法,抽象类中因为有普通方法,故也可以有静态方法。

在JDK1.8后(包括JDK1.8),在抽象类中依旧可以有静态方法,同时在接口中也可以定义静态方法了。


接口可以继承接口,而且可以继承多个接口,但是不能实现接口,因为接口中的方法全部是抽象的,无法实现;

如果是Java 7以及以前的版本,那么接口中可以包含的内容有:1. 常量;2. 抽象方法
如果是Java 8,还可以额外包含有:3. 默认方法;4. 静态方法
如果是Java 9,还可以额外包含有:5. 私有方法

抽象类可以实现接口,可以继承具体类,可以继承抽象类,也可以继承有构造器的实体类。

抽象类中可以有静态main方法;抽象类里可以没有抽象方法,没有抽象方法的抽象类就是不想让别人实例化它;

另外,抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super(参数列表)调用抽象类中的构造方法,可以用于实例化抽象类的字段。

当抽象类只有有参构造时,子类(包括抽象类和非抽象类)必须定义有参构造,调用super(参数)


下面总结常见的抽象类与接口的区别:

1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象;

2.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现(java8中 接口可以有实现方法 使用default或static修饰);

3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量;

4.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类;

5.抽象方法要被实现,所以不能是静态static的,也不能是私有private的,也不能被final修饰(试想一下,静态方法可以被类名直接调用,而类名直接调用一个没有实现的抽象方法没有意义)。

标签:子类,可以,接口,详解,抽象,抽象类,方法
From: https://www.cnblogs.com/wxdxb/p/18534616

相关文章

  • XSS详解
    XSS,全称是跨站脚本攻击(Cross-sitescripting,简称:XSS),是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上运行的脚本中。这些脚本通常是客户端的JavaScript,但也可以是VBScript、ActiveX、Flash或仅仅是普通的HTML。攻击者可以利用XSS漏洞旁......
  • 队列详解
    目录队列队列的概念及结构队列的实现代码队列功能的实现队列的尾插voidQueuePush(Queue*pq,QDataTypex);结构体封装指针typedefstructQueue总结代码队列的头删voidQueuePop(Queue*pq)代码队列的初始化voidQueueInit(Queue*pq)代码队列的销毁voidQueueDest......
  • FastAPI 查询参数与字符串校验详解:类型、校验规则与元数据设置
    FastAPI查询参数与字符串校验详解:类型、校验规则与元数据设置本文详细介绍了FastAPI中查询参数的设置与校验方法,涵盖了可选参数、默认值、必要参数和参数列表的处理方式。通过使用Query类,开发者可以为查询参数添加额外的校验规则,如最小长度、最大长度、正则表达式匹配......
  • glibc 内存分配与释放机制详解
    作者:来自vivo互联网存储团队-WangYuzhi本文以一次线上故障为基础介绍了使用glibc进行内存管理可能碰到问题,进而对库中内存分配与释放机制进行分析,最后提供了相应问题的解决方案。一、引言内存对象的分配与释放一直是后端开发人员代码设计中需要考虑的问题,考虑不周极易......
  • LitServe 快速部署类openai 接口服务
    以前简单说明过LitServe支持openai接口格式的服务api,以下是一个简单试用参考代码app.pyimportlitserveaslsclassSimpleLitAPI(ls.LitAPI):defsetup(self,device):self.model=Nonedefpredict(self,prompt):#`prompt`isalisto......
  • 【命令操作】Linux三剑客之sed详解 _ 统信 _ 麒麟 _ 方德
    原文链接:【命令操作】Linux三剑客之sed详解|统信|麒麟|方德Hello,大家好啊!今天带来一篇关于Linux三剑客之sed命令详解的文章。sed是一款功能强大的流编辑器,它可以在命令行中快速处理文本,支持替换、插入、删除等操作,特别适合用于处理大型文件或批量文本处理任务。本文......
  • MySQL索引详解
    MySQL索引详解索引介绍索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方:我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里......
  • 商品链接查询淘宝商品信息接口,淘宝天猫宝贝信息采集、淘宝商品历史最低价格数据接口、
    商品链接查询淘宝商品信息接口,淘宝天猫宝贝信息采集、淘宝商品历史最低价格数据接口、优惠信息数据、单日领券销量最高销量数据接口,淘宝联盟ck延期方案|接口+html前端UI界面PHP完整代码:<?php//定义API接口地址和参数$apiUrl="https://api.taolale.com/api/Tb_union......
  • 查询三网话费余额接口,移动话费余额接口、电信话费余额接口、联通话费余额的接口+html
    PHP是直接请求的接口,HTML代码也是直接请求的接口。如果HTML想上线运行,还是需要做下安全的。下边是PHP代码<?php//定义API接口地址和参数$apiUrl="https://api.taolale.com/api/Inquiry_Phone_Charges/get";//API文档地址:https://api.taolale.com/doc/13$api......
  • HC-SR04超声波传感器详解(STM32)
    HC-SR04是一款广泛使用的超声波传感器,它通过发射和接收超声波来测量距离。本文将详细介绍HC-SR04的工作原理、引脚描述、STM32的接线方式以及如何通过STM32控制HC-SR04来测量距离。一、HC-SR04传感器介绍HC-SR04超声波传感器的主要参数如下:工作电压:DC5V工作电流:3.3mA工......