《Java 核心技术卷1 第10版》学习笔记------ 接口(Interface)
接口技術作用:主要描述類具有什么功能,而并不給出每個功能的是的實現。
Java的繼承(inheritance)是不支持的多繼承的,但是Java接口是支持多繼承的。
一個 Java 類實現一個接口類就必須實現接口類中的每一個方法。
接口中的所有方法自動地屬于 public 。
在接口中還可以定義常量,但是不能有實例域。
在JDK1.8之前,也不能在接口中實現方法。1.8+版本可以實現一些簡單的方法(靜態方法、默認方法),不過這些方法不能引用實例域---(接口沒有實例域)
提供實例域和方法的任務應該由實現接口的那個類來完成。
接口中的靜態方法:
在 Java SE 8 中, 允許在接口中增加靜態方法 。理論上講 , 沒有任何理由認為這是不合法的 。 只是這有違于將接口作為抽象規范的初衷 。
通常的做法都是將靜態方法放在伴隨類中 。 在標準庫中 , 你會看到成對出現的接口 和實用工具類 , 如 Collection/ Collections 或 Path/ Paths 。
接口中的默認方法:
可以為接口方法提供一個默認實現 。 必須用 default 修飾符標記這樣一個方法 。
?
解決接口默認方法的沖突
如果先在一個接口中將一個方法定義為默認方法 然后又在超類或另一個接口中定義了,同樣的方法, 會發生什么情況 ?
Java 的相應規則要簡單得多 。 規則如下 :
1 ) 超類優先 。
如果超類提供了一個具體方法 , 同名而且有相同參數類型的默認方法會被忽略 。
2 ) 接口沖突 。
如果一個超接口提供了一個默認方法 另一個接口提供了一個同名而且,參數類型 ( 不論是否是默認參數 ) 相同的方法, 必須覆蓋這個方法來解決沖突 。
?
6.2.2 Comparator 接口
比較器接口,用于增加自定義的比較規則。
現在假設我們希望按長度遞增的順序對字符串進行排序, 而不是按字典順序進行排序 。肯定不能讓 String 類用兩種不同的方式實現 compareTo 方法,更何況, String 類也不應由我們來修改 。
要處理這種情況 , ArrayS .Sort 方法還有第二個版本, 有一個數組和一個比較器 ( comparator )作為參數, 比較器是實現了 Comparator 接口的類的實例 。
public interface Comparator<T> {int compare(T first, T second ) ; }要按長度比較字符串, 可以如下定義一個實現 Comparator<String > 的類 :
class LengthComparator implements Comparator<String> {public int compare(String first, String second ) {return first.lengthO - lengthO ;} }具體完成比較時,需要建立一個實例:
Comparator<String> comp = new LengthComparator(); if(comp.compare(words[i], words[j]) > 0);// 使用 Arrays.sort方法 String [] friends = { "Peter " , " Paul ", "Mary" } ; Arrays,sort (friends, new LengthComparatorO ) :lambda 表達式、函數式接口、方法引用、內部類、代理暫略。【后續單獨補上】
?
總結
以上是生活随笔為你收集整理的《Java 核心技术卷1 第10版》学习笔记------ 接口(Interface)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Java 核心技术卷1 第10版》学习
- 下一篇: 《Java 核心技术卷1 第10版》学习