- 接口业务场景:用来制定标准,全局常量和公共的抽象方法
1、接口概述
-
接口:将一些没有实现的方法封装到一起;
- 子类实现接口:必须实现接口所有的抽象方法
-
语法规则
interface 接口名{
//1、属性
//2、静态方法
//3、默认方法 需要使用default关键字
//4、抽象方法
}
- 范例
//1、创建接口
interface Usb {
public int AAA = 10;
//1、静态方法
static void BBB(){
System.out.println("调用静态方法...");
}
//2、默认方法
default public void CCC(){
System.out.println("调用默认方法...");
}
//3、抽象方法1
public abstract void read();
//4、抽象方法2
public abstract void write();
}
//2、创建YouPan子类实现接口
public class YouPan implements Usb {
public void read(){
System.out.println("U盘正在通过USB读取数据...");
}
public void write(){
System.out.println("U盘正在通过USB写入数据...");
}
}
//3、创建JianPan子类实现接口
public class JianPan implements Usb{
public void read(){
System.out.println("键盘正在通过USB接口读取数据...");
}
public void write(){
System.out.println("键盘正在通过USB接口写入数据...");
}
}
//4、创建main方法调用两个子类
public class UsbMain {
public static void main(String[] args) {
YouPan yp = new YouPan();
yp.read();
yp.write();
JianPan jp = new JianPan();
jp.read();
jp.write();
}
}
- 运行结果
2、接口使用细节
(1)接口不能被实例化;
(2)接口中的所有方法是public方法,接口中抽象方法,可以不用abstract修饰;
public abstract void AAA(); 等同于 void AAA()
(3)一个普通类实现接口,必须实现该接口的所有抽象方法实现;
(4)抽象类实现接口,可以不用实现接口的所有方法;
(5)一个类可以同时实现多个接口;
calss A extends b,c{ }
(6)接口的属性,只能是final的,而且是public static final修饰符;
(7)接口中的属性访问:接口名.属性名
interface.属性
(8)一个类不能继承其他的类,但可以继承多个别的接口;
interface A extends B,C{ }
(9)接口的修饰符,只能是public和默认,这点和类的修饰符一样的
3、接口和继承的区别
- 接口是对java但继承机制的一种补充
(1)接口和继承解决的问题不同
- 继承的价值:可解决代码的复用性和可维护性;
- 接口的价值:设计,设计好各种规范(方法),让其它类去实现这些方法;
(2)接口比继承更灵活
- 继承是 is - a的关系:猫是动物
- 接口时 like - a的关系:猫像狗一样萌
(3)接口在一定程度上实现了代码解耦【即:接口规范性+动态绑定】
- 范例
//1、创建父类 - Monkey类
class Monkey{
private String name;
public Monkey(String name){
this.name = name;
}
public void climbing(){
System.out.println("猴子会爬树...");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//2、创建接口1 - Fishable
interface Fishable{
void swimming();
}
//3、创建接口2 - Birdable
interface Birdable{
void flying();
}
//4、创建子类 - LittleMonkey继承Monkey,实现Fishable,Birdable
class LittleMonkey extends Monkey implements Fishable,Birdable{
public LittleMonkey(String name) {
super(name);
}
public void swimming(){
System.out.println(getName() + "通过学习,可以像鱼儿一样游泳...");
}
public void flying(){
System.out.println(getName() + "通过学习,可以像鸟儿一样飞翔...");
}
}
//5、创建main方法实现类LittleMonkey
public class Interface {
public static void main(String[] args) {
LittleMonkey lm = new LittleMonkey("无知祈");
lm.climbing();
lm.flying();
lm.swimming();
}
}
- 运行结果
4、接口和抽象类的区别
接口 | 抽象类 |
---|---|
接口中是没有实现代码的实现 | 抽象类中可以有普通成员方法 ,并且可以定义变量 |
接口中的方法修饰符号 只能是public | 抽象类中的抽象方法可以有public ,protected ,default |
接口中没有构造方法 | 可以有构造方法 |
- 接口和抽象类选择
(1)当我们需要一组规范的方法的时候,我们就可以用接口,在具体的业务中,来对接口进行实现,能达到以不变应对万变,多变的需求的情况我们只需要改变对应的实现类 。
(2)如果多个实现类中有者相同可以复用的代码 这个时候就可以在实现类和接口之间,添加一个抽象类,把公共的代码抽出在抽象类中。然后要求不同实现过程的子类可以重写抽象类中的方法,来完成各自的业务。