把80G移動硬盤拆開裝到了筆記本里,把筆記本原有的40G硬盤又做成了移動硬盤,爽,筆記本空間大了一倍,終于可以分個15G給Feroda了。
Chapter 9 Abstract Classes and Interfaces
1. 接口的實現 (implementing interfaces)
public class XXX [extends XXX] implements XXX[, XXX, XXX, ...]
然后具體地實現接口中的抽象方法。
2. 接口和抽象類
接口中的數據必須都是常量,抽象類則可任意;
接口中的方法僅含有一個簽名(signature),抽象類可以有具體的方法。
由于接口中所有的數據都是final static,方法都是public abstract,因此修飾符均被省略。
public interface T1 {
int k = 1;
void p();
}
類和接口都可以繼承多個接口,但接口不能繼承類
和抽象類一樣,盡管接口不能被構造,但仍然可以作為數據類型用,并被造型(cast)為它的子類(子接口)。
決定究竟使用類還是接口,要根據關系判斷是 strong is-a 還是 is-kind-of。類用在有明確的繼承關系的父子類上,如公司職員和人;接口多用于wesk-is-a關系,或者說is-kind-of關系,即對象僅僅擁有某個特性,比如String類可以比較大小,因此繼承了Comparable接口。
容易發現,類名都是名詞,而接口則為名詞或形容詞。
3. 標記接口 marker interface
不包含數據或方法的接口稱為標記接口,一般用來標記具有某種特性的類。
如 java.lang.Cloneable
public interface Cloneable {
}
用來標記這個類能不能使用clone()方法被復制
關于clone()方法,它僅僅復制調用對象的淺層內容(shallow copy),如果調用對象中存在某個類的變量,它僅僅復制了這個變量的reference。
如果一個類想擁有clone()方法,就必須在聲明的時候加入implement java.lang.Cloneable(否則會產生 CloneNotSupportedException),并必須重載clone()方法(否則會導致語法錯誤,因為java.lang.Object中的clone()是protected的),或者直接使用super.clone()
4. wrapper class --把基本類型當作類操作
類名大多是原類型首字母大寫,除int - Integer,char - Character以外。
(1)構造方法舉例
public Integer(int value)
public Integer(String s)
(2)常量舉例
Float.MIN_VALUE
Double.MAX_VALUE
(3)類型轉換用法舉例
long l = doubleObject.longValue(); //自動去小數
String s = doubleObject.toString();
(4)valueOf(static) 用法舉例
Double doubleObject = Double.valueOf("12.4");
(5)字符串轉化為數舉例
Integer.parseInt("11", 2) 返回 3 (二進制)
Integer.parseInt("1A", 16) 返回 26
(6)Arrays.sort 方法
僅能用于元素類型相同且都implement Comparable的情況
(7)If a is a subclass of B, every instance of A[] is an instance of B[]. Therefore, the following statement is true:
new GregorainCalendar[10] instanceof Calendar[]
(8)類和基礎類型的自動轉換 (JDK 1.5 Feature)
Integer[] intArray = {1, 2, 3}; //自動把基礎類型轉為類,稱為boxing
System.out.println(intArray[0] + intArray[1] + intArray[2]); //輸出6,自動把類轉為基礎類型,稱為unboxing