接口是一种能力
关键字:interface
语法:
[修饰符] interface 接口名 extends 父接口1,父接口2.......{ //常量定义 //方法定义 } class 类名 extends 父类名 implements 接口1,接口2.....{ //类成员 }
接口的注意事项:
1:接口的命名规则与类相同,如果是public,则该接口在整个项目中可见,如果省略修饰符,则该接口只能在当前类中可见
2:接口中可以定义常量,不能定义变量,接口中的属性会自动用public static final 修饰,即接口中的属性都是全局静态常亮,接口中的常量必须在定义时指定初始值;
3:接口中的所有方法都是抽象方法,接口中的方法都会用public abstract修饰,即接口中只有全局抽象方法
4:和抽象类一样,接口也不能实例化,接口中不能有构造方法,
5:接口不能实例化,因为接口是比抽象类抽象程度更高的类型
6:一个类如果实现了某个接口,必须重写该接口中的所有方法
7:接口中的所有字段必须是公有的静态常量
8:接口本身也是一种数据类型
9:接口只是为实现它的类定义了规范,保证实现类方法签名和接口中对应方法一致。
10:通过接口可以实现多继承
11:一个借口中最好只定义一个方法,防止接口污染
抽象类和接口的区别
01.抽象类中可以有普通方法,接口中不能
02.抽象类可以有构造,
接口不能
03.抽象类中可以有普通字段,而接口中不行
04.抽象类不能实现多继承,接口可以
01.抽象类中可以有普通方法,接口中不能
02.抽象类可以有构造,
接口不能
03.抽象类中可以有普通字段,而接口中不行
04.抽象类不能实现多继承,接口可以
注:接口内,所有方法都没有方法体
接口的特性:
接口不可以被实例化 常作为类型使用
实现类必须实现接口的所有方法
实现类可以实现多个接口
接口中的变量都是静态常量 Java中的多继承
示例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.javaOppDay01; public abstract class Door { //开门方法 public abstract void openDoor(); //关门方法 public abstract void closeDoor(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.javaOppDay01; public class FDDoor extends Door implements Ilock,IRing { //响铃的方法 public void ring(){ System.out.println("门铃响了"); } @Override //上锁的方法 public void lockd() { System.out.println("门锁了"); } @Override public void openDoor() { System.out.println("openDoor"); } @Override public void closeDoor() { System.out.println("closeDoor"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.javaOppDay01; public interface Ilock { //在接口中所有的变量都是静态 public int num=3; //在接口所有的方法都是抽象方法,没有方法体 public void lockd(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.javaOppDay01; //门铃接口 public interface IRing { public void ring(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.javaOppDay01; public class MyMain { public static void main(String[] args) { FDDoor door =new FDDoor(); door.closeDoor(); door.lockd(); door.ring(); door.openDoor(); } }
总结:
接口有比抽象类更好的特性:
1.可以被多继承
2.设计和实现完全分离
3.更自然的使用多态
4.更容易搭建程序框架
5.更容易更换实现
......
Java中的接口
属性全都是全局静态常量
方法都是全局抽象方法
无构造方法
一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法
抽象类利于代码复用,接口利于代码维护