Java详细讲解不同版本的接口语法和抽象类与接口的区别
作者:学废的小白! 发布时间:2022-09-30 01:46:38
什么是接口?
说到接口,USB大家肯定不陌生~
接口是一种标准、规范.
注意:接口一旦制定好,使用者和实现者都必须遵循的标准.
接口的语法: (JDK7.0)
(1) 关键字:interface
(2) 语法: interface 接口名{}
(3) 接口编译之后会生成对应的 .class文件
(4) 接口不能创建对象,但是可以声明引用 接口名 引用名;
(5) 接口中没有构造方法
(6) 接口中所有的属性都是公开的静态常量
(默认被:public static final)
(7) 接口中所有的方法都是公开抽象方法
(默认被:public abstract修饰)
注意:接口中的方法默认访问权限为public;
类中方法默认访问权限是 default
接口的实现类:
语法:
class 类名 implements 接口名{}
注意:实现的关键字为 implements
(1) 如果实现类不想成为抽象类,必须覆盖(实现)接口中所有的方法
(2) 实现类中覆盖接口中的方法时,访问权限必须是public
使用:
(1) 接口类型的引用中,只能存储对应实现类的对象,体现多态的应用
(2) 语法:
接口名 引用名 = new 实现类类名(实参);
注意:一个接口可以定义多个实现类
接口的继承性:(很重要哦~)
接口与接口之间为多继承的关系
(1) 一个接口可以同时继承多个父接口
(2) 语法:
interface 接口名 extends 父接口名1,父接口名2{}
类与接口之间为多实现的关系
(1) 一个类可以同时实现多个接口
(2) 语法:
class 类名 implements 接口名1,接口名2{}
(3) 一个类同时实现多个接口,不想成为抽象类,则需要实现所有接口中所有方法
(包括所实现接口的父接口中的方法)
一个类实现多个接口的同时还有可以继承一个类
(1) 如果一个类继承一个父类同时实现多个接口,必须先继承,再实现
(2) 语法:
class 类名 extends 父类名 implements 父接口1,父接口2{}
注意:必须先 extends ,再 implements
类与类之间存在:单继承------extends
类与接口之间存在:多实现------implements
接口与接口之间存在:多继承------extends
接口的影响:
1.由于接口之间为多继承的关系,同时类与接口之间是多实现的关系,所以让多态更加多元化和复杂
2.如果强制类型转换的双方只要有一方为接口类型,则编译一定通过,运行分以下两种情况:
a.如果转换的引用中存储的实际对象类型是要转换类型的一种,运行通过
b.如果转换的引用中存储的实际对象类型不是要转换的一种,编译通过,但是运行报错,错误信息:
Java.lang.ClassCastException(类型转换异常)
接口的语法: (JDK8.0)
(1) 默认方法:
a. public default 返回值类型 方法名(形参列表){
// 方法的实现部分
}
b. 注意:接口中方法被 default修饰代表,此方法允许带有方法实现部分
c. 默认方法访问权限 为 public
d. 默认方法允许被覆盖,但是覆盖时访问修饰符为 public
(2) 静态方法:
a. public static 返回值类型 方法名(形参列表){
// 方法的实现部分
}
b. 接口中静态方法访问权限是public
接口的语法: (JDK9.0)—(私有方法)
(1) 接口中从9.0开始,方法可以被 private修饰
(2) 语法:
private 返回值类型 方法名(形参列表){
// 方法的实现
}
(3) 私有方法供接口内部使用,通常将其他方法的共同逻辑部分提取,减少代码冗余
接口的分类
常量接口:
接口中只有属性、没有方法,应用很少
空接口:
通常称为标记接口,接口中没有任何属性和抽象;
例如:IO对象序列化时应用
函数式接口:
接口中有且只有一个抽象方法(静态和默认不关注),广泛应用在Lambda表达式中
抽象类和接口的区别? (要牢记哦~)
来源:https://blog.csdn.net/weixin_60768515/article/details/123719970


猜你喜欢
- 概述 这是一个自定义色盘,根据点,直线和圆的几何学加上hsv颜色模型完成技术点几何:圆的标准方程式:(x-a)²
- 如下所示: @Override public String getEmployeeBysup(String employeeI
- #include <algorithm>class TestClass{public: int Sub(int x,
- volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性。什么是线程的可见性:锁提供了两种主要特性:互斥(mutual exc
- 本文实例实现一个如下图所示的Android折线图,供大家参考,具体内容如下首先是控件绘图区域的划分,控件左边取一小部分(控件总宽度的八分之一
- 过滤器、 * 、 * 概念概念1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,可以动态生
- 本文实例为大家分享了java查找图中两点之间所有路径的具体代码,基于邻接表,供大家参考,具体内容如下图类:package graph1;im
- /* 系统名:SaleManage* 模块名:SortPags* 模块说明:排序分页类(传入DataTable,及相关信息,然后分页,并排序
- 问题描述在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们。但是也有一定的问题,当我们动态sql拼接的块很多的时
- 1.需求背景需要实现一个动态加载但不显示出来的视图,且该视图上有个动态生成的二维码,最后用其去生成一张快照(也就是图片)。(常见这种情况是来
- 启动类的存放位置今天,写了一个项目,但是启动类为什么一直报错我是放在这个位置的,但是就一直报放在默认包错误 想记录下微服务启动类的
- 一个真实的故事大学的时候就开过一门课程,讲设计模式,可是大学生没什么编程实践经验,在大学里面听设计模式的感觉,就像听天书。听着都有道理,可是
- 想问下这是什么情况。在导入一个maven项目时只有一个finish,点击完finish后没有任何反应。。。各位大佬给看下这是什么问题。急,在
- 文件输出为字符串示例代码:/** * 读取文件为字符串 * * @return */pub
- 生命太短暂,不要去做一些根本没有人想要的东西。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术
- 本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法。分享给大家供大家参考,具体如下:拦截短信有几个关键点:
- 在C#中,如果在方法参数前面加上ref关键字,说明参数传递的是引用,而不是值。如何理解呢?参数是简单类型的例子static void Mai
- Java 7的这个新特性改变了警告的对象。构建这些类型毕竟有破坏类型安全的风险,这总得有人知道。但 API 的用户对此是无能为力的,不管do
- 静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用。因此想在静态方法中直接引用非静态方法是不可能的,因为不知道调用哪个对象
- 详解Kotlin中的面向对象(二)在Kotlin中的面向对象(一)中,介绍了Kotlin类的相关操作,本文将在上文的基础上,继续介绍属性、接