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 数据结构及算法实战系列 014:Java队列08——数组实现的双端队列ArrayDeque
Java 数据结构及算法实战系列 014:Java队列08——数组实现的双端队列ArrayDeque