对接口的理解和说明

本文详细介绍了Java中的接口,包括接口的语法规则、使用方式、特性、实现多个接口以及接口间的继承。接口是类之间的一种契约,提供标准化的交互方式,支持多继承特性,增强了代码的复用和多态性。
摘要由CSDN通过智能技术生成

接口



一、接口

在Java中,接口不是类,而是对希望符合这个接口的类的一组需求。

比如我们可以将Java中的接口可以类比为电脑中的USB接口,USB接口规定了可插接的设备的通用规格,类似于接口中定义的方法;
任何设备只要符合USB接口的规定,就可以插接到计算机上使用,类似于类实现接口,比如可以将键盘,鼠标通过USB接口连进行连接;
而USB接口主机可以同时连接多个不同类型的设备,这也类似于一台计算机可以调用多种实现了接口的类;
因此,Java中的接口与USB接口一样,提供了一种标准化、通用的接口,实现了不同类之间的互相调用和协作。


二、接口详解

1.接口的语法规则

接口的定义格式与类的定义格式基本相同,只要将class关键字换成interface关键字即可

public interface InterfaceName {
    //常量
    double SPEED_LIMIT = 95;
    // 声明方法
    public abstract void method1();
    public void method2();
    abstract void method3();
    void method4();
}

1.接口中不能包含实例字段,但是可以包含常量,但是常量默认都是public static final
2.在接口中,方法默认是 public 和 abstract 的(在 Java 8 之后,也可以定义默认方法和静态方法),上面的四种方法的写法都是抽象方法,但是更推荐方法4

提示:

  1. 创建接口时, 接口的命名一般以大写字母 I 开头.
  2. 接口的命名一般使用 “形容词” 词性的单词.
  3. 接口中的方法和属性最好不要加任何修饰符号, 为了保持代码的简洁性.

2.接口的使用

1.接口不是类,不能使用new直接实例化一个接口,而是必须要有一个"实现类"来"实现"接口,实现接口中的抽象方法(子类和父类是extends继承关系,而接口和类是implements关系)

public class ClassName implements InterfaceName {
    // 实现接口方法
}

2.示例代码

public interface Shape {
    // 常量定义
    double PI = 3.1415926;

    // 抽象方法定义
    double getArea();

    double getPerimeter();
}

public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getArea() {
        return PI * radius * radius;
    }

    public double getPerimeter() {
        return 2 * PI * radius;
    }
}

a.这个接口定义了两个常量PI、以及两个抽象方法getArea()和getPerimeter()。实现该接口的类必须实现这两个方法,并且返回值类型和参数类型必须和接口定义的一致。
b.这个类实现了Shape接口,并提供了getArea()和getPerimeter()方法的具体实现。


3.接口的特性

1.接口类型是一种引用类型,但是不能直接new接口对象

public class Test{
  public static void main(String[] args){
    Shape shape = new Shape();
  }
}
//Error
//Shape是抽象的,无法实例化

2.接口中的方法是public的抽象方法,默认修饰是public abstract,接口中不能包含实例字段,但是可以包含常量,但是常量默认都是public static final
3.接口中的方法不在接口中实现,而是利用实现接口的类来实现
4. 重写接口中方法时,不能使用default访问权限修饰
5. 接口中不能有静态代码块和构造方法(在 Java 8 之后,也可以定义默认方法和静态方法)
6. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
7. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类


4.实现多个接口

Java中只支持单继承,不支持多继承,为了解决这个问题,从而推出了接口,一个类可以实现多个接口

1.语法格式

class MyClass implements Interface1, Interface2, Interface3 {
    // 实现接口的具体方法
}

MyClass类实现了三个接口Interface1、Interface2、Interface3,需要在类名后使用implements关键字,接口之间使用逗号分隔

2.注意点

a.实现的多个接口中不能有同名的默认方法(Java 8及以上版本支持默认方法),否则会导致编译错误

b.如果多个接口中有同名的抽象方法,那么在实现类中只需要实现一次即可

c.如果多个接口中有同名的常量,那么在实现类中只需要使用其中一个即可

d.一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类

IDEA 中使用 ctrl + i 快速实现接口

3.示例代码

interface Interface1 {
    public void method1();
}

interface Interface2 {
    public void method2();
}

interface Interface3 {
    public void method3();
}

class MyClass implements Interface1, Interface2, Interface3 {
    public void method1() {
        System.out.println("Method1");
    }

    public void method2() {
        System.out.println("Method2");
    }

    public void method3() {
        System.out.println("Method3");
    }
}

public class Main {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.method1();
        obj.method2();
        obj.method3();      
    }
}

这个示例代码中,MyClass实现了三个接口Interface1、Interface2、Interface3,并分别实现了这三个接口中的方法。在main函数中,我们创建了一个MyClass对象,并调用了它实现的三个方法。


三、接口与继承

1.联系:

1.继承和接口都可以用来实现代码复用和多态性。

2.子类继承父类时,可以继承父类的属性和方法;实现接口时,需要实现接口中定义的所有方法,从而实现接口的规范。

3.继承和接口都可以实现多态性,子类可以覆盖父类的方法,实现不同的行为;实现接口的类也可以根据自己的需要实现接口中的方法,实现不同的行为。

2.区别:

1.继承是一个类与另一个类之间的关系,而接口是类与类之间的一种契约关系。

2.继承可以继承父类的属性和方法,而接口只能定义方法和常量,不能包含属性。

3.一个类只能继承一个父类,但是可以实现多个接口。

4.继承中的子类与父类之间存在is-a(是一种)的关系,而接口中的实现类与接口之间存在has-a(有一个)即有一个特性的关系。

5.继承中的子类可以直接访问父类的属性和方法,而实现接口的类必须实现接口中所有的方法。

总的来说,上面文字中的最重要的一句话是:

继承表达是is-a的关系,而接口表示的是has-a的关系

以动物为例

狗是一种动物,具有跑步的特性
鸭子是一种动物,不仅会跑,还会游泳


四、接口间的继承

1.接口可以进行继承,利用extends来继承,

语法格式如下:

interface SubInterface extends SuperInterface {
    // 子接口的方法定义
}

SubInterface是子接口,SuperInterface是父接口,使用extends关键字进行继承。子接口可以继承多个父接口,使用逗号分隔

2.示例代码

interface Animal {
    void eat();
}

interface Bird extends Animal {
    void fly();
}

class Sparrow implements Bird {
    public void eat() {
        System.out.println("Sparrow is eating");
    }

    public void fly() {
        System.out.println("Sparrow is flying");
    }
}

public class Main {
    public static void main(String[] args) {
        Sparrow sparrow = new Sparrow();
        sparrow.eat();
        sparrow.fly();
    }
}

在代码中,Animal是一个父接口,Bird是一个子接口,Sparrow实现了Bird接口,并实现了eat()和fly()方法。在main函数中,我们创建了一个Sparrow对象,并调用了它实现的两个方法


总结

Java中的接口是一种特殊的抽象类,它只包含常量和抽象方法的定义,没有任何具体实现,简单而言,接口是多个类的公共规范,是一种引用数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值