一、接口的概述
- 从狭义的角度讲就是指java中的
interface
- 从广义的角度讲
对外提供规则
的都是接口 - 从本质上讲,接口是一种
特殊的抽象类
,这种抽象类中只包含``常量
和抽象方法
的定义,而没有变量
和方法
的实现
。
1.接口是一种标准,是一种规范,是一种约定
2.接口可以扩展功能
3.接口是灵活的,可以即插即拔
4.接口由继承者来实现
2.接口的格式
格式:
public interface 接口名{
//定义常量
//定义抽象方法
}
接口的实现类格式:
public class 类名 implements 接口{
//实现/重写接口的方法
//定义普通方法
}
常量:必须使用public static final修饰可省略。
方法:必须使用public abstract 修饰可省略。
3.接口的特点
1.接口使用`interface`修饰
2.接口是常量和抽象方法的集合
常量: 默认使用` public static final`
方法: 默认使用 `public abstract`修饰
3.在JDK1.8以后不仅仅只有常量和抽象方法,还有默认方法和静态方法
默认方法用来直接给子类使用,如果子类想重写也可以自行根据需求重写,不会强制重写
静态方法用来直接通过接口名访问
4.接口不能够实例化
5.接口如果想要实例化-->利用多态
6.接口的子类实现类特点:
如果一个类想要实现一个接口就必须实现接口中定义的所有抽象方法
如果一个类不想实现接口中的抽象方法,那么实现类也升级为接口
class Demo1_Interface {
public static void main(String[] args) {
//Inter i = new Inter(); //接口不能被实例化,因为调用抽象方法没有意义
Inter i = new Demo(); //父类引用指向子类对象,使用子类方法
i.print();
}
}
interface Inter {
public abstract void print(); //接口中的方法都是抽象的
}
class Demo implements Inter {
public void print() {
System.out.println("print");
}
}
4.使用接口的好处
- 扩展类的功能
- 接口实现了多重继承,实现类和任何实现接口子类的通信和交互
- 接口更灵活,开发中常用
5.接口中的成员特点
-
成员变量
- 只能是常量,并且是静态的并公共的。
- 默认修饰符:
public static final
-
成员方法
- 只能是抽象方法
- 默认使用
public abstract
修饰
-
构造方法
- 接口中没有构造方法
class Demo2_Interface {
public static void main(String[] args) {
Demo d = new Demo();
d.print();
System.out.println(Inter.num);
}
}
interface Inter {
public static final int num = 10; //public static final没有先后顺序
//public Inter(){} 接口中没有构造方法
//public void print() {接口中不能定义非抽象方法};
public abstract void print();
}
//一个类不写继承任何类,默认继承Object类
class Demo /*extends Object*/ implements Inter {
public void print() {
//num = 20;这句注释打开会报错,因为无法为最终变量num分配值
System.out.println(num);
}
public Demo() {
super();
}
}
6.抽象类与接口的区别
1.抽象类
- 成员变量:可以是变量,也可以是常量
- 构造方法:有
- 成员方法:可以抽象,也可以不抽象
2.接口
- 成员变量:只可以是常量
- 成员方法:只可以抽象
3.设计理念区别
- 抽象类 被继承体现的是:
is a
的关系。抽象类中定义的是该继承体系的共性功能。 - 接口 被实现体现的是:
like a
的关系。接口中定义的是该继承体系的扩展功能。
7.类与类,类与接口,接口与接口的关系
1.类与类
- 继承关系,只能单继承,可以多层继承
2.类与接口
- 实现关系,可以是单实现,也可以是多实现
- 并且还可以在继承一个类的同时实现多个接口
3.接口与接口
- 继承关系,可以单继承,也可以多继承