Java接口的基本用法(小白必读)
在 Java 程序中,一个类只能有一个父类,只支持单重继承,不支持多重继承。但在实际应用中,又经常需要使用多重继承来解决问题。因此,Java 提供了接口,以实现类的多重继承。
在面向对象的程序开发过程中,抽象类与接口是实际项目开发过程中使用最广泛的方法,本节重点讲解接口的基本用法。
从面向编程的角度,可以将接口理解为对不同类型的事物的共同的行为特征的抽象。在现实世界中存在一种普遍的现象,从抽象的角度来看,不同类型的事物可能拥有相同的行为特征。
例如,鸟和飞机都有飞行的行为特征,但是由于鸟和飞机是不同类型的事物,因此不应该使用统一的父类来抽象飞行这一共同的行为特征。此时,可以使用一个接口来抽象飞行的行为特征,将接口命名为“可飞行的”。此时可以将某个类和接口组合到一起,表示该类具备该接口抽象的行为特征。
类和接口的组合方式是类“实现”某个接口。例如,一个实现了“可飞行的”接口的类,表示该类具备飞行的行为特征。
在 Java 中,可以使用关键字 interface 来定义一个接口,语法格式如下:
从 Java 8 开始,在接口中可以定义使用 default 和 static 修饰的方法,这些方法可以具有方法体。在 Java 9 中,接口中的方法可以使用 private 和 private static 修饰。接口中所有的属性均使用 public static final 修饰,即全局常量。目前,一个 Java 接口中最多可以有 6 种不同的类型。
在 Java 中,使用接口是为了克服单重继承的限制,因为一个类只能有一个父类,而一个类可以实现多个接口。另外,在定义接口时,一个接口可以有多个父接口,它们之间用逗号分隔。
接下来通过一个实例介绍接口的实现。
在面向对象的程序开发过程中,抽象类与接口是实际项目开发过程中使用最广泛的方法,本节重点讲解接口的基本用法。
什么是接口
Java 程序中的接口是一种抽象类型,用于描述类必须实现的行为。从面向编程的角度,可以将接口理解为对不同类型的事物的共同的行为特征的抽象。在现实世界中存在一种普遍的现象,从抽象的角度来看,不同类型的事物可能拥有相同的行为特征。
例如,鸟和飞机都有飞行的行为特征,但是由于鸟和飞机是不同类型的事物,因此不应该使用统一的父类来抽象飞行这一共同的行为特征。此时,可以使用一个接口来抽象飞行的行为特征,将接口命名为“可飞行的”。此时可以将某个类和接口组合到一起,表示该类具备该接口抽象的行为特征。
类和接口的组合方式是类“实现”某个接口。例如,一个实现了“可飞行的”接口的类,表示该类具备飞行的行为特征。
在 Java 中,可以使用关键字 interface 来定义一个接口,语法格式如下:
interface 接口名 [extends 接口1,接口2...]( //接口内的方法,省略关键字abstract 返回值类型 方法名(参数列表); }在 Java 中,与类的成员类型相比,接口中的成员类型显得较为局限。在 Java 8 以前的所有版本中,接口的所有方法都不包含实现(方法体),即都是抽象方法,并且限定都使用 public abstract 来修饰。
从 Java 8 开始,在接口中可以定义使用 default 和 static 修饰的方法,这些方法可以具有方法体。在 Java 9 中,接口中的方法可以使用 private 和 private static 修饰。接口中所有的属性均使用 public static final 修饰,即全局常量。目前,一个 Java 接口中最多可以有 6 种不同的类型。
在 Java 中,使用接口是为了克服单重继承的限制,因为一个类只能有一个父类,而一个类可以实现多个接口。另外,在定义接口时,一个接口可以有多个父接口,它们之间用逗号分隔。
接口的实现
在 Java 中,类可以通过关键字 implements 来指定实现接口的名称,语法格式如下:[修饰符] 类名 extends '父类' [implements <接口1>,<接口2>,]{ }
- 修饰符用于指定类的访问权限,可以是 public、final和abstract,可选。
- implements 接口列表可选,用于指定该类实现哪些接口。当使用关键字 implements 时,接口列表为必选参数。
接下来通过一个实例介绍接口的实现。
/* * 定义Flyable接口 */ interface Flyable { // 定义全局常量,默认使用public static final修饰 String f = "I have wings!"; // 定义抽象方法takeoff(),默认使用public abstract修饰 void takeoff(); // 定义抽象方法fly() void fly(); // 定义Glidable接口 } // 定义Glidable接口 interface Glidable extends Flyable { void glide(); } // Bird类实现了接口 class Bird implements Glidable { // 实现takeoff()方法 public void takeoff() { System.out.println("我要起飞了!"); } public void glide() { System.out.println("我在天空中滑翔!"); } // 实现fly()方法 public void fly() { System.out.println("我飞不了那么高!"); } // 定义测试类 public class Test { public static void main(String args[]) { // 创建Bird类的实例对象 Bird b = new Bird(); // 调用Bird类的takeoff()方法 b.takeoff(); // 调用Bird类的glide()方法 b.glide(); // 调用Bird类的fly()方法 b.fly(); } } }运行结果为:
我要起飞了!
I have wings!我在天空中滑翔!
I have wings!我飞不了那么高!