一、前言
上文讲述了有关抽象类和抽象方法的知识点,本文会讲解有关接口的知识点
二、概述
上一次我们说了抽象方法的存在是因为父类可以抽取子类中的共性方法,但是共性方法内实现方法不同所以要将共性方法写成抽象方法,那么如果子类中有一个“另类”不需要这个方法的话,我们就无法使用抽象方法了,而是要使用接口,哪个子类需要用,就继承该接口
三、简单记忆
例如还是有三个人ABC,工作都是程序员,到了中午吃饭的时候了,A和B都去干饭了,但是C说不行我不吃饭,敲代码使我快乐,存在子类不调用该抽象方法的情况时,那么此时无法将“吃”提取到父类做抽象方法了,但是如果写两变一样的代码又使得代码不简洁,那么将吃定义为接口,有这个行为的子类就去执行接口
四、代码格式
1.格式
interface 接口名称{ // 抽象方法 }
2.示例
public interface Eat { public abstract void eat(); }
3.IDEA创建接口
首先依然先创建模块,再创建包,再包下新建类
一般我们创建类选择第一个Class,如果 要创建接口要选择第二个Interface
可以看到我们就成功创建了一个接口
接口的图标和class是不同的,我们放大看一下,有这个标志意味着创建成功
五、成员特点
1.成员变量
- 只能是常量
- 默认修饰符:public static final
2.构造方法
无构造方法
3.成员方法
- 只能是抽象方法
- 默认修饰符:public abstract
六、接口的实现
1.概述
类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同
2.格式
使用 implements 关键字
class 类名 implements 接口1,接口2,接口3...{ }
3.注意点
1.必须重写实现的全部接口中所有抽象方法
2.如果一个类实现了接口,但是没有重写完全部接口的全部抽象方法,这个类也必须定义成抽象类
我们用IDEA来演示一下
IDEA给出了我们两个解决方案:要么将该类变为抽象类,要么实现接口(Inter)中的方法
我们选择实现方法
可以看到,要实现接口中的方法才可以,这也是我们常用的解决方法
七、使用说明
1. 接口不能实例化
可以这么理解:接口代表的是某一种状态,而不是个体,如果实例化,代码会报错
我们来看IDEA给出的解决办法
这里的实现方法是后面会讲到的匿名内部类知识点,暂时先了解一下即可
2. 接口的子类
接口的子类要么是抽象类,要么重写接口中所有的抽象方法,这一点和上文讲到的抽象类很相似,可以点击链接查看上一篇文章【Java面向对象8——抽象类和抽象方法(知识点+使用方法)】
3.类和接口的实现
类与接口之间的关系是多实现的,一个类可以同时实现多个接口
public class Student extends Person implements Study , Exercise{ public Student(String name, int age) { super(name, age); } @Override public void study() { System.out.println("学生要学习"); } @Override public void exercise() { System.out.println("学生要锻炼身体"); } }
4.接口与接口的多继承
接口继承接口就是把其他接口的抽象方法与本接口进行了合并
public interface LearnCoding { void coding(); void test(); }
public interface LearnMath { void exercise(); void test(); }
public interface Student extends LearnCoding ,LearnMath { void test(); }
八、思考题
读者可以思考一下然后在评论区写出自己的答案,标准答案会在下一篇文章中公布
如果一个接口中,有10个抽象方法,但是我在实现类中,只需要用其中一个,该怎么办?
九、结语
接口的使用非常广法,在实际开发中也很重要,如果想要检测一下自己的学习成果可以阅读这两篇文章(含图解)
【基础版练习:Java练习题——抽象类、方法以及接口】
【进阶版练习:Java练习题——接口和抽象类综合题】