接口的概念
- 接口(Interface),在java中是一个抽象类型,是抽象方法的集合,接口一般以关键字Interface来声明。一个类一般通过继承接口的方式,从而来使用接口的抽象方法。
- 声明接口的方式与类很相似,但是接口并不是类,它们属于不同的概念。类描述对象的属性和方法,接口则是类要实现的方法的抽象,它相当于一个方法的模板。
- 除非实现接口的类是抽象类,否则该类要定义接口的所有方法。
- 接口不能被实例化,但可以被实现。
接口和类的异同
相同点
- 一个接口可以有多个方法。
- 接口的文件保存在以接口名命名的 .java 文件中。
- 接口相应的字节码文件保存在 .class 文件中。
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。
不同点
- 接口不能实例化对象。
- 接口没有构造方法。
- 接口中的方法必须是抽象方法。
- 接口中的属性只能是static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
接口和抽象类的区别
- 抽象类中的方法可以有方法体(描述方法的具体功能),但是接口没有方法体。
- 抽象类中的属性可以是各种类型的,而接口中的属性只能是 public static final 类型的。
- 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法)
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
接口的特性
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract 。
- 接口中可以有属性,但是接口中的属性会被隐式的指定为 public static final 变量 。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法
接口的声明
关键字Interface用来声明一个接口。
修饰符 interface 接口名称 {
// 属性 必须初始化
// 抽象方法
}
接口中的属性修饰符被隐式指定为public static final,可省略,但属性必须初始化,默认常量
public: 使接口的实现类可以使用该常量;
static:接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态变量。
final:接口中不可以定义变量,即定义的变量前都要加上final修饰,使之成为常量,且必须赋初始值!
代码实例:
public interface Name{
String Name = "Lingfeng";//修饰符隐式指定为public static final,可省略,但属性必须初始化
public void SetName();//抽象方法,没有方法体
}
接口的实现
关键字: implements
1、创建一个类实现接口
public class 类名 implements 接口名{
2、必须实现接口中所有的抽象方法为实体方法,改分号为大括号
在大括号中定义方法体
}
代码实例,以实现鼠标监听器接口为例:
鼠标监听器接口:
public interface MouseListener extends EventListener {
//在组件上单击(按下并释放)鼠标按钮时调用。
public void mouseClicked(MouseEvent e);
//在组件上按下鼠标按钮时调用。
public void mousePressed(MouseEvent e);
//在组件上释放鼠标按钮时调用。
public void mouseReleased(MouseEvent e);
//当鼠标进入组件时调用。
public void mouseEntered(MouseEvent e);
//当鼠标退出组件时调用。
public void mouseExited(MouseEvent e);
}
G_Listener类中实现鼠标监听器接口:
public class G_Listener implements MouseListener{
//在组件上单击(按下并释放)鼠标按钮时调用。
public void mouseClicked(MouseEvent e){
//方法体
}
//在组件上按下鼠标按钮时调用。
public void mousePressed(MouseEvent e){
//方法体
}
//在组件上释放鼠标按钮时调用。
public void mouseReleased(MouseEvent e){
//方法体
}
//当鼠标进入组件时调用。
public void mouseEntered(MouseEvent e){
//方法体
}
//当鼠标退出组件时调用。
public void mouseExited(MouseEvent e){
//方法体
}
}
参考资料
https://www.runoob.com/java/java-interfaces.html
博客版权说明
第一条:本博客仅代表作者本人的观点,不保证文章等内容的有效性。
第二条:本博客部分内容或转载或摘录于部分书籍或其他站点,但都会注明作/译者和原出处。如有不妥之处,敬请指出。
第三条:在征得本博客作者同意的情况下,本博客的作品允许非盈利性引用,并请注明出处:“作者:HNU凌风”字样,以尊重作者的劳动成果。版权归原作/译者所有。未经允许,严禁转载。
第四条:对非法转载者,作/译者保留采用法律手段追究的权利。
第五条 本博客之声明以及其修改权、更新权及最终解释权均属HNU凌风
第六条 以上声明的解释权归HNU凌风所有。