java基礎篇之最基礎
阿新 • • 發佈:2019-01-02
靜態程式碼塊執行一次,隨著類載入而載入
public class Test {
static HashMap hashMap = new HashMap(){ // map優雅的寫法
{
put("1","2");
}
};
public Test() {
System.out.println("構造器");
}
{
put("a","2");
put("b","2");
put("c","2");
System.out. println(this);
}
static{
System.out.println("靜態程式碼塊");
}
{
System.out.println("例項初始化塊");
}
public static void main(String[] args) {
new Test();
System.out.println("***********");
new Test();
System.out.println(hashMap);
}
}
輸出:
靜態程式碼塊
例項初始化塊
構造器
\***********
例項初始化塊
構造器
抽象類
- 必須繼承父類的抽象方法,除非是抽象類
- 抽象類不一定都有抽象方法
- 抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public
介面
- 介面中的變數會被隱式地指定為public static final變數
- 介面中的方法全都是public abstract
區別
1)抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract 方法;
2)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;
3)介面中不能含有靜態程式碼塊以及靜態方法,而抽象類可以有靜態程式碼塊和靜態方法;
4)一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。
設計理念
- 飛機和鳥是不同類的事物,但是它們都有一個共性,就是都會飛。那麼在設計的時候,可以將飛機設計為一個類Airplane,將鳥設計為一個類Bird,但是不能將 飛行 這個特性也設計為類,因此它只是一個行為特性,並不是對一類事物的抽象描述。
- 此時可以將 飛行 設計為一個介面Fly,包含方法fly( ),然後Airplane和Bird分別根據自己的需要實現Fly這個介面。
- 然後至於有不同種類的飛機,比如波音、空客等直接繼承Airplane即可,對於鳥也是類似的,不同種類的鳥直接繼承Bird類即可。
- 從這裡可以看出,繼承是一個 "是不是"的關係,而 介面 實現則是 "有沒有"的關係。
- 對於抽象類,如果需要新增新的方法,可以直接在抽象類中新增具體的實現,子類可以不進行變更
- 對於介面則不行,如果介面進行了變更,則所有實現這個介面的類都必須進行相應的改動
//old :每個impl實現三個介面,
//new :定義一個抽象類來實現三個介面,所有商家的實現類繼承該抽象類,
//報警是行為,不一定都有
interface Alram {
void alarm();
}
//所有的門都可以開和關
abstract class Door {
void open();
void close();
}
class AlarmDoor extends Door implements Alarm {
void oepn() {
//....
}
void close() {
//....
}
void alarm() {
//....
}
}
匿名內部類
……