Java基础-014-Java 接口

Posted xhBruce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础-014-Java 接口相关的知识,希望对你有一定的参考价值。

Java基础-014-Java 接口


接口(Interface)不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

接口的特性

  • 接口中的所有方法自动地属于 public。 因此,在接口中声明方法时,不必提供关键字 public
  • 接口不是类,尤其不能使用 new 运算符实例化一个接口
  • 可以建立类的继承关系一样,接口也可以被扩展。
  • 在接口中不能包含实例域或静态方法,但却可以包含常量。但是接口中的变量会被隐式的指定为 public static final 变量
  • 尽管每个类只能够拥有一个超类, 但却可以实现多个接口。
  • JDK 1.8 以后,接口里可以有静态方法和方法体了。
  • JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。
  • JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。

解决默认方法冲突

  如果先在一个接口中将一个方法定义为默认方法, 然后又在超类或另一个接口中定义了同样的方法, 会发生什么情况?
  诸如 Scala 和 C++ 等语言对于解决这种二义性有一些复杂的规则。
  幸运的是,Java 的相应规则要简单得多。规则如下:

  • 1 ) 超类优先。如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。
  • 2 ) 接口冲突。 如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法, 必须覆盖这个方法来解决冲突。
// NameA,NameB 两个接口 default String getName()
public class Person implements NameA,NameB{
    @Override
    public String getName() {
        return NameA.super.getName();
    }
}

接口与回调


回调(callback) 是一种常见的程序设计模式。
public class Main {
    public static void main(String[] args) {
        ActionListener listener = new TimePrinter();

        // construct a timer that calls the listener
        // once every 10 seconds
        Timer t = new Timer(10000, listener);
        t.start();
        JOptionPane.showMessageDialog(null, "Quit program?");
        System.exit(0);
    }
}

class TimePrinter implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        System.out.println("At the tone, the time is " + new Date());
        Toolkit.getDefaultToolkit().beep();
    }
}

在这里插入图片描述在这里插入图片描述

Comparator.java

java.util.Comparator.java

可以继承实现两对象比较,这查看String排序比较,String实现了Comparable<String>。

  • String.compareTo 方法可以按字典顺序比较字符串
public class Main {
    public static void main(String[] args) {
        String[] friends = { "Peter", "Paul", "Mary" };
        Arrays.sort(friends);
        for(String str:friends){
            System.out.println(str);
        }
    }
}

在这里插入图片描述

  • LengthComparator显示长度排序
public class LengthComparator implements Comparator<String> {
    public int compare(String first, String second) {
        return first.length() - second.length();
    }
}
public class Main {
    public static void main(String[] args) {
        String[] friends = { "Peter", "Paul", "Mary" };
        Arrays.sort(friends, new LengthComparator());
        for(String str:friends){
            System.out.println(str);
        }
    }
}

在这里插入图片描述

以上是关于Java基础-014-Java 接口的主要内容,如果未能解决你的问题,请参考以下文章

Java Lambda

Java 数据结构及算法实战系列 014:Java队列08——数组实现的双端队列ArrayDeque

Java 数据结构及算法实战系列 014:Java队列08——数组实现的双端队列ArrayDeque

Java 数据结构及算法实战系列 014:Java队列08——数组实现的双端队列ArrayDeque

java 代码片段

Java 8 新特性总结