Java基础学习之接口详解
概述
在Java中,接口(interface)是一个相对抽象的概念,它并不是任何一个具体对象的实例,而是一种特殊的类,可以理解为是一种规范,定义了一些方法和属性,但是并不具体实现,因此需要由其他类去实现这些方法和属性。在下文中,我们将详细讲解接口的基本概念、定义方式及使用方法。
接口的定义
在Java中,接口使用interface
关键字定义,语法如下:
interface 接口名{
//接口属性
//接口方法
}
通过上面的语法,我们可以清晰地看到,接口的定义并没有具体的实现,只包含了接口的属性和方法,这也是接口的最主要特点之一。
接口的特性
多继承
Java中的类只支持单继承,但是接口可以通过实现多个接口(implements)实现多重继承。例如:
interface Interface1 {
void method1();
}
interface Interface2 {
void method2();
}
class MyClass implements Interface1, Interface2 {
public void method1() {
//方法1的实现
}
public void method2() {
//方法2的实现
}
}
上面的代码中,MyClass
实现了Interface1
与Interface2
两个接口。
无法被实例化
由于接口中没有具体的实现,所以接口无法被实例化。例如:
interface MyInterface {
void method();
}
MyInterface mi = new MyInterface();//这个语句无法通过编译
我们只能通过具体实现了接口的类来创建接口的实例。
不允许使用修饰符
在接口的属性和方法中,我们不能使用任何访问修饰符(public、private、protected),因为定义接口本身就是一个对外公开的行为,所以不需要使用任何访问修饰符。
允许定义常量
在接口中,我们可以定义常量(public static final),定义的常量只能是接口类型的,不能是具体实现的类型。例如:
interface MyInterface {
public static final int COUNT = 100;
}
允许定义默认方法
在Java 8之后,接口允许定义默认方法(default方法),即定义一个默认实现,这个实现既不是抽象方法,也不是静态方法。例如:
interface MyInterface {
default void method() {
System.out.println("默认方法实现");
}
}
实现这个接口的具体类可以重写这个默认方法,也可以使用默认的实现。
允许定义静态方法
在Java 8之后,接口也可以定义静态方法,使用static
关键字即可。例如:
interface MyInterface {
static void method() {
System.out.println("静态方法");
}
}
这个静态方法可以直接通过接口名称调用,而无需通过实现该接口的类。
接口与抽象类的区别
虽然接口与抽象类都是Java中的抽象概念,但是它们在定义和使用上还是存在一些差异的。
- 接口可以多继承,但抽象类只能单继承;
- 接口中的方法必须全部是定义的抽象方法,而抽象类中可以包含具体实现的方法;
- 接口中的属性只能是public static final,而抽象类中可以定义各种类型的属性;
示例:
示例1
我们来定义一个图形的接口,其中包含两个方法:获取面积和获取周长。代码如下:
interface Shape {
double getArea();
double getPerimeter();
}
我们定义了一个接口Shape
,包含了获取面积和获取周长的方法,但是这个接口并没有任何具体实现。
现在我们可以定义各种形状的具体实现,例如长方形和正方形。代码如下:
class Rectangle implements Shape {
private double width;
private double height;
Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getArea() {
return width * height;
}
public double getPerimeter() {
return 2 * (width + height);
}
}
class Square implements Shape {
private double side;
Square(double side) {
this.side = side;
}
public double getArea() {
return side * side;
}
public double getPerimeter() {
return 4 * side;
}
}
通过实现Shape
接口,我们分别实现了长方形和正方形的具体实现,并且根据自己的需求分别实现了计算面积和周长的方法。
示例2
我们再来看一个更加复杂的例子:支付接口。我们可以定义一个支付接口,在接口中定义一些支付相关的方法,并且根据具体的支付方式来进行实现。代码如下:
interface Payment {
boolean payOnline(float amount); //在线支付
boolean payOffline(float amount); //线下支付
}
在上面的代码中,我们定义了一个支付接口,包含了在线支付和线下支付两种支付方式。
现在我们具体实现这个支付接口,通过银行卡支付和微信支付来分别实现这两种支付方式。代码如下:
class UnionPay implements Payment {
public boolean payOnline(float amount) {
System.out.println("使用银联卡在线支付" + amount + "元");
return true;
}
public boolean payOffline(float amount) {
System.out.println("使用银联卡线下支付" + amount + "元");
return true;
}
}
class WeChatPay implements Payment {
public boolean payOnline(float amount) {
System.out.println("使用微信在线支付" + amount + "元");
return true;
}
public boolean payOffline(float amount) {
System.out.println("使用微信线下支付" + amount + "元");
return true;
}
}
通过实现Payment
接口,我们分别实现了银行卡支付和微信支付的具体实现,并且根据自己的需求分别实现了在线支付和线下支付的方法。
以上就是Java基础学习之接口详解的相关内容,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础学习之接口详解 - Python技术站