>[success] # java -- 接口
1. 如果一个**抽象类**没有字段,**所有方法**全部都是**抽象方法**,此时就可以使用接口声明,因此可以说,接口就是一种比抽象类还抽象的类,体现在所有方法都为抽象方法
2. 定义接口的关键字是**interface**
>[danger] ##### 接口特点
1. 里面变量只能是常量
2. 接口只能继承接口
3. 接口可以多继承
4. 不能有构造方法
5. 从**Java8**开始增加新特性,接口中允许出现**非抽象方法**和**静态方法**,但**非抽象方法**需要使用**default**关键字修饰,原因之前定义的抽象方法如果实现接口的类非抽象类需要将所有的抽象方法都重写,但并不是每一个抽象方法在继承的类都有用到因此**default** 修饰的方法可以不用被重写
6. 从**Java9**开始增加新特性,接口中允许**出现私有方法**
>[danger] ##### 定义接口
~~~
public interface ITest {
public static final int num= 1; // 变量只能是常量
int num1 =2 ; // 缩写因为只能是常量因此定义常量 public static final 可以省略
public abstract int getNum(); // 定义抽象方法
int getNum1(); // 缩写
public default void show1(){} // java8 开始允许定义为default方法在继承时候不用重写
public static void show2(){} // java8 开始允许定义静态方法,接口不能被实现,静态方法调用不用被实现符合接口
private void show(){} // 从Java9开始允许接口中出现私有方法
// --------出现java 私有方法方法------------
// 当多个默认方法有共同的逻辑时候,想做提取例如,提取一个 show3方法实际这样
// show3 方法还会被其他方法重写但show3 仅仅是共同逻辑此时就可以使用java9特性 私有方法
public default void show3(){
// ....重复逻辑
}
public default void show4(){
show3();
show(); // 更好
}
public default void show5(){
show3();
show(); // 更好
}
}
~~~
* 定义接口
~~~
public interface ITest1 {
}
~~~
* 接口多继承,只需要重写抽象方法
~~~
public class Test implements ITest,ITest1{
@Override
public int getNum() {
return 0;
}
@Override
public int getNum1() {
return 0;
}
}
~~~
* 使用
~~~
public class UseTest extends Test{
public static void main(String[] args) {
// 使用多态向上转型
Test test= new UseTest();
// 使用多态向上转型
ITest test1 = new UseTest();
}
}
~~~
* 如果抽象类实现接口可以不用将抽象方法都实现
~~~
public abstract class ATest implements ITest{
}
~~~
* 接口只能继承接口
~~~
public interface ITest1 extends ITest{
}
~~~
>[success] # 类和接口之间的关系
| 名称 | 关键字 | 关系 |
| --- | --- |--- |
| 类和类之间的关系 | 使用extends关键字表达继承关系 | 支持单继承 |
|类和接口之间的关系 |使用implements关键字表达实现关系 |支持多实现|
|接口和接口之间的关系| 使用extends关键字表达继承关系 | 支持多继承 |
>[success] # 抽象类和接口的主要区别
1. 定义抽象类的关键字是abstract class,而定义接口的关键字是interface
2. 继承抽象类的关键字是extends,而实现接口的关键字是implements
3. 继承抽象类支持单继承,而实现接口支持多实现
4. 抽象类中可以有构造方法,而接口中不可以有构造方法
5. 抽象类中可以有成员变量,而接口中只可以有常量
6. 抽象类中可以有成员方法,而接口中只可以有抽象方法
7. 抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写(Java8以前的版本)
8. 从Java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default关键字修饰
9. 从Java9开始增加新特性,接口中允许出现私有方法
- windows -- 环境变量
- Vscode -- 编写java
- 初始java
- java -- 关键字
- 编写第一个java程序
- java -- 注释
- 计算机存储 -- 进制
- java -- 类型
- java -- 变量
- 数字类型
- 布尔类型
- 字符类型
- 类型转换
- 双等比较是什么
- java -- 运算符
- 算数运算符
- 字符串拼接
- 关系/比较运算符
- 自增减运算符
- 逻辑运算符
- 三目运算
- 赋值运算符
- 移位运算符
- 位运算符
- 运算符优先级
- java -- 流程控制语句
- if /else if /if -- 判断
- switch case分支结构
- for -- 循环
- 用双重for循环
- while -- 循环
- do while -- 循环
- 案例练习
- java -- 数组
- 数组的存储
- 数组的增删改查
- 数组的特点
- 数组案例
- 二维数组
- 数组的工具方法
- java -- 方法
- java -- 方法的重载
- java -- 方法的调用流程
- java -- 类方法传参注意事项
- java -- 方法练习案例
- 对比 return break continue
- for each循环
- java -- 基础练习
- java -- 面向对象
- java -- 创建类和对象
- java -- 访问控制符
- java -- 类成员方法
- java -- 构造方法
- java -- this
- java -- 封装
- java -- 对象内存图
- java -- 创建对象案例
- java -- static
- java -- 继承
- super -- 关键字
- java -- 构造块和静态代码块
- java -- 重写
- java -- final
- java -- 多态
- java -- 抽象类
- java -- 接口
- 引用类型数据转换
- 综合案例
- java -- 内部类
- java -- 回调模式
- java -- 枚举类型
- java -- switch 使用枚举
- java -- 枚举方法使用
- java -- 枚举类实现接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 递归练习
- java -- 设计模式
- 单例模式
- java -- 注解
- java -- 元注解
- Java -- 核心类库
- java -- 处理字符串
- Java -- String
- String -- 常用方法
- String -- 正则
- Java -- StringBuilder 和 StringBuffer
- 知识点
- Java -- StringJoiner 字符串拼接
- 练习题
- 字符串的总结
- Java -- 包装类
- Integer
- Double
- Boolean
- Character
- java -- 集合类
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 获取当前时间戳
- Java -- 异常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法