Java接口详解

简介: Java接口详解


接口方法

       在Java设计的时候, 我们所说的接口,不同于类,我们尝尝希望一个类能满足某个特定的功能,或者需求.

       我们在使用Arrays类中的sort方法对对象数组进行排序,但是对象所属的类必须实现Comparable接口:

可以看到里面只有一个方法:

public  interface Comparable {
    int compareTo(Object other);
}

       在这个接口中, compareTo方法是抽象的, 它没有具体的实现, 任何实现Comparable接口的类都需要包含一个compareTo方法, 这个方法必须接收一个Object参数,并返回一个整数, 否则的话这个类也应当是抽象的.

       在接口中所有的方法都是默认public, 在声明的时候可以不必提供public 关键字:

       为了让类实现一个接口, 需要完成下面两个步骤:

  1. 将类声明为实现给定的接口
  2. 对接口中的所有方法提供定义

       对于一个类,声明接口需要使用到关键字implements

       例如: class  Exam implements  Comparable

       当然, 现在这个Exam类需要提供compareTo方法, 假设我们比较的是Exam类里面的一个数caseInt的大小, 接下来是对其compareTo进行实现:

public int compareTo(Object other) {
    Exam otherExam = (Exam)other;
    return Double.compare(caseInt, other.caseInt);
}

       这里使用了静态方法Double.compare 方法 : 如果第一个参数小于第二个参数, 它会返回一个负值, 如果两者相等就返回0, 否则返回一个正值

注意: 在接口的声明中没有将compareTo方法声明为public, 这是因为接口中所有的方法都是自动public的方法, 但是在实现某个接口的类中方法, 就必须要把继承来的接口方法声明为public, 否则编译器将认为这个方法的访问属性是包可访问. 说这类中默认的访问属性, 之后编译就会报错, 指出你试图提供更严格的访问权限\

       提出一个问题: 为什么我们不能直接在Exam类里面提供一个compareTo方法呢?

       使用接口的主要原因是, Java是程序设计语言是一个强类型的语言, 在使用某个方法的时候, 编译器需要能够确认这个方法确实存在, 在sort 方法里面会有下面这样类似的实现:

if (a[i].compareTo(a[j]) > 0) {
    // rearrange a[i] and a[j];
}

       编译器必须确认a[i] 一定存在这个compareTo方法, 如果a是一个Comparable对象的数组, 那么就可以确保存在compareTo方法, 因为每个实现comparable接口的类都需要提供这个compareTo方法.

       在一些简单的实现了Comparable的接口的类中重写compareTo方法, 尝尝使用Integer类和Double类中的静态方法compare来比较这种比较简单类型的数值比较, 如果是复杂的比较需要自己去自定义比较的内容:

  • static int compare (int x, int y) : 如果x < y 放回一个负数, 如果x == y 返回0, 否则返回正整数
  • static int compare (double x, double y) : 同上

接口的属性

       接口不是类, 具体一点就是不能使用new 关键字来实例化一个接口, 例如:

        尽管不能构造接口的对象, 但是仍然可以声明接口变量:

        接口变量必须引用一个实现了这个接口的类对象:

x = new A();

       接下来, 可以使用instanceof来检查一个对象是否实现了某个特定的接口:

if (exam instanceof Comparable) {
    // ......
}

       现在, 假设Exam接口中包含了恶一个常量(接口中不能包含实例字段, 但是可以包含常量) :

interface Exam {
    void function();
    int a = 1;
}

       接口中的字段总是public static final的

package Thread1Demo;
 
import java.awt.*;
 
public class Main {
    public static void main(String[] args ) {
        Exam y;
        // 接口中的字段总是public static final 的
        int ret = Exam.a;
        System.out.println(ret);
        // Exam.a = 2;   Cannot assign a value to final variable 'a'
        //A a = new A();
        //a.B = 20;    Cannot assign a value to final variable 'B'
    }
}
interface Exam {
    void function();
    int a = 1;
}
 
class A implements Exam {
    public final int B = 10;
    @Override
    public void function() {
 
    }
}

       可以直接访问接口中的常量

       如果实现了某个接口的类中存在和接口中相同变量名的变量, 那么优先级如何?

package Thread1Demo;
 
import java.awt.*;
 
public class Main {
    public static void main(String[] args ) {
        A exa = new A();
        System.out.println(exa.a);
        
    }
}
interface Exam {
    void function();
    int a = 1;
}
 
class A implements Exam {
    public final int a = 10;
    @Override
    public void function() {
 
    }
}

可以看到是类中的变量优先.

       同方法在接口中的声明一样, 常量在接口中的声明是默认public static fianl的, 也就是说在接口中声明的时候不需要加上public static final:

 


目录
相关文章
|
2月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
213 3
|
2月前
|
Java
在Java中如何实现接口?
实现接口是 Java 编程中的一个重要环节,它有助于提高代码的规范性、可扩展性和复用性。通过正确地实现接口,可以使代码更加灵活、易于维护和扩展。
212 64
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
173 57
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
98 38
|
1月前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
1月前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
51 6
|
2月前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
39 2
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
156 1
|
2月前
|
Java Android开发
Eclipse 创建 Java 接口
Eclipse 创建 Java 接口
41 1
|
2月前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
49 1