java接口的一些细节

本文介绍了Java接口的概念,包括接口的定义、字段和方法特性,以及默认方法和回调的应用。重点强调了接口如何在Java中实现多重继承的功能,避免了传统多重继承的复杂性和效率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

接口(interface)用来描述类应该做什么,而不是指定它们具体应该如何做。

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

类可以实现接口,使用关键字implements,一个类可以实现多个接口。

语法细节

1.关于接口的字段

(1).接口绝对不会有实例字段。

(2).接口可以定义字段,但被默认为public static final修饰的常量。

(3).可以声明接口变量,但不能实例化出一个接口的对象,该变量可以引用实现了该接口的类的对象。

2.关于接口的方法

(1).接口的方法都是默认被public修饰。

(2).一个类实现接口时,也必须把该方法声明为public。

(3).在java 8中,允许为接口增加静态方法。

(4).在java 9中,可以定义private方法,同时也可以是静态的,通常仅作为辅助方法。

3.接口的默认方法

(1).可以定义默认方法,也就是有默认实现的方法,用default来声明(访问控制还是public)。

(2).默认方法出现冲突的情况下,实型超类优先,也就是继承的类中的方法优先与接口中的方法。

(3).如果是两个接口中同时出现冲突的默认方法,则需要显式指示具体方法,如:

class Student implements Person,Named{
    public String getName(){
        return Person.super.getName();
    }
    ...
}

(4).只要有一个接口中的冲突方法提供了默认实现,则必须如上进行显式指定。

(5).绝不能创建一个默认方法重新定义Object中的某个方法,如toString或equals,因为所有的类默认继承Object类,在超类优先原则下,这些方法永远无法超越Object提供的方法。

接口与回调

回调(callback)是一种常见的程序设计模式。本质含义是,可以将一个有特定行为的对象传递给一个方法,这个方法就可以自行的在需要的时候调用这个特定对象的方法。

一个典型的例子是Comparator比较器:

在对ArrayList数组进行排序时,我们可以使给数组中的每一个元素实现Comparable接口并实现comparaTo方法,以提供调用方法Arrays.sort(list);时的默认排序策略。

同时我们也可以自定义一个包含排序策略的对象,并将这个对象传递给sort方法,以此来实现除默认compareTo方法以外的其他排序策略,如Arrays.sort(list,obj);,这就是回调的思想。

具体来说,就是自定义一个比较器类(LengthComparator),其实现Comparator接口,并重写conpare方法,然后通过new的方式传递给sort方法:

public class Main {
    public static void main(String[] args){
        String[] list = {"xiaoming","xiaoliu","xiaohuang"};
        Arrays.sort(list,new LengthComparator());
        System.out.println(Arrays.toString(list));
    }
}

class LengthComparator implements Comparator<String>,Cloneable{
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(o1.length(),o2.length());
    }
}

经验总结

java不允许多重继承(extends),但允许实现多个接口;多重继承会让语言变得十分复杂(如C++)或是让程序运行效率降低(如Eiffel);但java接口可以提供多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值