当前位置: 首页 > news >正文

49天精通Java,第11天,java接口和抽象类的异同,default关键字

在这里插入图片描述

目录

    • 一、什么是接口
    • 二、接口的特点
    • 三、接口和类的区别
    • 四、接口和抽象类的区别
    • 五、接口的声明方式
    • 六、default默认方法

大家好,我是哪吒。

一、什么是接口

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

Java中有一个Comparable接口,只包含一个compareTo方法,public int compareTo(T o);,只有方法定义,没有具体的方法实现,接受一个Object参数,返回一个整数。

在这里插入图片描述

通过implements关键字去实现Comparable接口,并对compareTo方法进行重写,已实现自己的业务逻辑。

public class Test implements Comparable{@Overridepublic int compareTo(Object o) {return 0;}
}

二、接口的特点

  1. 接口中的每个方法都是隐式抽象的,接口中的方法会被隐式的指定为public abstract,接口中不用声明public;
  2. 接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量;
  3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法;

三、接口和类的区别

  1. 接口不能实例化
  2. 接口没有构造方法
  3. 接口中所有的方法必须是抽象方法,java8之后可以使用default关键字修饰非抽象方法
  4. 接口不能包含成员变量,除了static和final变量
  5. 接口支持多实现

四、接口和抽象类的区别

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不能有方法体
  2. 抽象类中的成员变量可以使各种类型的,而接口中的成员变量只能是public static final类型的。
  3. 接口中不能含有静态代码块以及静态方法,而抽象类中可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类可以实现多个接口。

五、接口的声明方式

public interface UserService {void study();void sleep();
}
public interface StudentService {void play();
}

在这里插入图片描述

public class StudentServiceImpl implements StudentService,UserService{@Overridepublic void play() {}@Overridepublic void study() {}@Overridepublic void sleep() {}
}

六、default默认方法

通过default关键字修饰的方法就是默认方法。

如果接口中有很多方法,实现它的类就需要重写接口中的所有方法,不管是否需要用到。如果接口中的某个方法被default关键字修饰了,那么具体的实现类中可以不用实现方法。

public interface Person {void study();default void say() {System.out.println("Person say");}
}
public class Student implements Person {@Overridepublic void study() {System.out.println("Student study");}
}

如果Student需要实现两个类,这两个接口中都有用default修饰的say方法,那么student类必须重写say方法了,否则就会报错。

在这里插入图片描述


在这里插入图片描述

🏆本文收录于,49天精通Java从入门到就业。

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

http://www.lryc.cn/news/45729.html

相关文章:

  • JAVA练习99-逆波兰表达式求值
  • 恶意软件、恶意软件反杀技术以及反病毒技术的详细介绍
  • 【数据库运维】mysql备份恢复练习
  • 刷题30-对称的二叉树
  • 精选简历模板
  • 蓝桥杯嵌入式第十三届客观题解析
  • 【Redis】线程问题
  • 【算法题】2498. 青蛙过河 II
  • 【新2023Q2押题JAVA】华为OD机试 - 整理扑克牌
  • 【hello C语言】文件操作
  • OBCP第八章 OB运维、监控与异常处理-数据库监控
  • 已经提了离职,还有一周就走,公司突然把我移出企业微信,没法考勤打卡, 还要继续上班吗?...
  • Win11启用IE方法
  • 有人靠ChatGPT 狂赚200W !有人到现在,连账号都没开通......
  • 基于GD32F470的mbedtls 3DES算法测试
  • 为什么一些人很瞧不起 Java?
  • DropMAE: Masked Autoencoders with Spatial-Attention Dropout for Tracking Tasks
  • 【shell 基础(11)循环之for】带列表:空格子串、换行子串、展开、命令替换、seq;不带列表:接受参数、类C
  • 虚拟环境中创建Django项目 详细完整
  • BCSP-玄子JAVA开发之JAVA数据库编程CH-08_JDBC
  • 一位程序员将一款开源工具变成了价值75亿美元的帝国
  • tmux | 终端操作软件,解决深度学习中终端相关问题
  • 信号 捕捉
  • sqlserver中判断是否存在的方法
  • 基于Kettle跑批的案例说明
  • 2023 最新版网络安全保姆级自学指南
  • Chapter9.3:线性系统稳定性分析及综合实例
  • EXCEL 在复杂查询时摒弃vlookup() sumif() 等公式,而使用数据透视表的初步学习
  • C 文件读写
  • Linux中实现程序开机自启——将程序配置为系统服务