- Java教程
- Java - 主页
- Java - 概述
- Java - 环境设置
- Java - 基本语法
- Java - 变量类型
- Java - 基本数据类型
- Java - 基本运算符
- Java 控制语句
- Java - 循环控制
- Java - 决策
- Java - 如果-否则
- Java-开关
- Java - For 循环
- Java - For-Each 循环
- Java - While 循环
- Java - do-while 循环
- Java - 中断
- Java - 继续
- 面向对象编程
- Java - 对象和类
- Java - 方法
- Java - 构造函数
- Java - 访问修饰符
- Java-继承
- Java-多态性
- Java - 重写
- Java-抽象
- Java-封装
- Java - 接口
- Java - 包
- Java - 内部类
- Java 数据类型
- Java - 字符
- Java 文件处理
- Java - 文件和 I/O
- Java 错误与异常
- Java - 异常
- Java多线程
- Java-多线程
- Java同步
- Java-同步
- Java-线程间通信
- Java-线程死锁
- Java-线程控制
- Java网络
- Java-网络
- Java-URL 处理
- Java - 泛型
- Java集合
- Java - 集合
- Java列表接口
- Java - 列表接口
- Java队列接口
- Java - 队列接口
- Java地图接口
- Java - 地图接口
- Java - SortedMap 接口
- Java设置接口
- Java - 设置接口
- Java - SortedSet 接口
- Java数据结构
- Java - 数据结构
- Java-枚举
- Java 集合算法
- Java - 集合
- Java - 迭代器
- Java - 比较器
- Java杂项
- Java - 正则表达式
- Java-序列化
- Java - 发送电子邮件
- Java - Applet 基础知识
- Java - 文档
- Java 有用资源
- Java - 问题与解答
- Java - 快速指南
- Java - 有用的资源
- Java - 讨论
- Java - 示例
Java - 接口
接口是Java中的引用类型。这与课堂类似。它是抽象方法的集合。类实现了接口,从而继承了接口的抽象方法。
除了抽象方法之外,接口还可以包含常量、默认方法、静态方法和嵌套类型。方法体仅存在于默认方法和静态方法中。
编写接口与编写类类似。但类描述了对象的属性和Behave。接口包含类实现的Behave。
除非实现接口的类是抽象的,否则接口的所有方法都需要在类中定义。
接口在以下方面与类相似 -
一个接口可以包含任意数量的方法。
接口被写入扩展名为.java的文件中,接口的名称与文件的名称相匹配。
接口的字节代码出现在.class文件中。
接口出现在包中,其对应的字节码文件必须位于与包名称匹配的目录结构中。
然而,接口在几个方面与类不同,包括 -
您无法实例化接口。
接口不包含任何构造函数。
接口中的所有方法都是抽象的。
接口不能包含实例字段。唯一可以出现在接口中的字段必须声明为静态和最终的。
接口不能由类扩展;它是由一个类来实现的。
一个接口可以扩展多个接口。
声明接口
Interface关键字用于声明接口。这是声明接口的简单示例 -
例子
以下是界面示例 -
/* File name : NameOfInterface.java */ import java.lang.*; // Any number of import statements public interface NameOfInterface { // Any number of final, static fields // Any number of abstract method declarations\ }
接口具有以下属性 -
接口是隐式抽象的。声明接口时不需要使用abstract关键字。
接口中的每个方法也是隐式抽象的,因此不需要abstract关键字。
接口中的方法是隐式公共的。
例子
/* File name : Animal.java */ interface Animal { public void eat(); public void travel(); }
实现接口
当一个类实现了一个接口时,你可以认为该类签署了一份契约,同意执行该接口的具体Behave。如果一个类不执行接口的所有Behave,则该类必须将自己声明为抽象类。
类使用implements关键字来实现接口。Implements 关键字出现在类声明中声明的 extends 部分之后。
例子
/* File name : MammalInt.java */ public class MammalInt implements Animal { public void eat() { System.out.println("Mammal eats"); } public void travel() { System.out.println("Mammal travels"); } public int noOfLegs() { return 0; } public static void main(String args[]) { MammalInt m = new MammalInt(); m.eat(); m.travel(); } } interface Animal { public void eat(); public void travel(); }
输出
Mammal eats Mammal travels
当重写接口中定义的方法时,需要遵循几条规则 -
除了接口方法声明的方法或接口方法声明的方法的子类之外,不应在实现方法上声明检查异常。
重写方法时应保持接口方法的签名以及相同的返回类型或子类型。
实现类本身可以是抽象的,如果是这样,则不需要实现接口方法。
实现接口时,有几个规则 -
一个类可以同时实现多个接口。
一个类只能扩展一个类,但实现多个接口。
接口可以扩展另一个接口,就像类可以扩展另一个类一样。
扩展接口
一个接口可以扩展另一个接口,就像一个类可以扩展另一个类一样。extends关键字用于扩展接口,子接口继承父接口的方法。
以下 Sports 接口由 Hockey 和 Football 接口扩展。
例子
// Filename: Sports.java public interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // Filename: Football.java public interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // Filename: Hockey.java public interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); }
Hockey 接口有四个方法,但它从 Sports 继承了两个方法;因此,实现 Hockey 的类需要实现所有六个方法。同样,实现 Football 的类需要定义 Football 中的三个方法和 Sports 中的两个方法。
例子
interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); } public class HockeyDemo implements Hockey { public void setHomeTeam(String name) { System.out.println("Home team: " + name); } public void setVisitingTeam(String name) {} public void homeGoalScored() {} public void visitingGoalScored() {} public void endOfPeriod(int period) {} public void overtimePeriod(int ot) {} public static void main(String[] args) { Hockey hockeyDemo = new HockeyDemo(); hockeyDemo.setHomeTeam("India"); } }
输出
Home team: India
扩展多个接口
一个Java类只能继承一个父类。不允许多重继承。然而,接口不是类,一个接口可以扩展多个父接口。
extends 关键字使用一次,并且父接口在逗号分隔的列表中声明。
例如,如果 Hockey 接口扩展了 Sports 和 Event,则它将声明为 -
例子
public interface Hockey extends Sports, Event
interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); } interface Event { public void organize(); } public class HockeyDemo implements Hockey, Event { public void setHomeTeam(String name) { System.out.println("Home team: " + name); } public void setVisitingTeam(String name) {} public void homeGoalScored() {} public void visitingGoalScored() {} public void endOfPeriod(int period) {} public void overtimePeriod(int ot) {} public static void main(String[] args) { HockeyDemo hockeyDemo = new HockeyDemo(); hockeyDemo.setHomeTeam("India"); hockeyDemo.organize(); } public void organize() { System.out.println("Match organized. "); } }
输出
Home team: India Match organized.
标记接口
当父接口不包含任何方法时,最常见的是扩展接口的使用。例如,java.awt.event 包中的 MouseListener 接口扩展了 java.util.EventListener,其定义为 -
例子
package java.util; public interface EventListener {}
没有方法的接口称为标记接口。标记接口有两个基本设计目的 -
创建公共父级- 与由 Java API 中的数十个其他接口扩展的 EventListener 接口一样,您可以使用标记接口在一组接口中创建公共父级。例如,当接口扩展 EventListener 时,JVM 知道该特定接口将在事件委托场景中使用。
向类添加数据类型- 这种情况就是术语“标记”的由来。实现标记接口的类不需要定义任何方法(因为该接口没有任何方法),但该类通过多态性成为接口类型。