第十三講 繼承、方法重寫與super、final關鍵字、抽象類與接口、Object類、工廠和靜態代理模式

導讀

繼承:其實說白了就是代碼的重用組件(代碼段組合)。使用繼承可以用子類完成父類的任務,並且子類可以完成自己的業務。意思其實已經很明確了,在生活上,子女可以繼承父母的財產。


方法重寫:重寫,是基於繼承關係的基礎上的。所謂重寫,其實就是覆蓋的意思,我把方法全部更改了代碼體的內容。比如,我有一個方法register註冊方法是用來註冊QQ,但我重寫了之後register方法則可以用來註冊百度。


final關鍵字:修飾屬性和修飾方法以及修飾類,所以含義都有所不同。


抽象類:是一個類的模板,那麼這樣說的話會有些迷茫,就說它是一張設計圖紙的話,這樣會對理解有很好的把握。它可以有方法實現體,所以要求實現類不一定要全部實現它裏面定義的所有方法。


接口:這個跟抽象類不一樣,它是一種規範。每一個實現類都必須實現它裏面所有的方法,因爲它裏面的方法全部都是抽象方法來的。


Object類:所有Java類都直接或者間接地繼承它,所以這些類都擁有它的方法。我們介紹它的常用方法。


工廠模式:其實就是因爲策略模式的劣勢而誕生的一種新型的設計模式。工廠模式很節省資源的,用戶需要什麼樣的對象工廠就會創建什麼樣的對象給它。


代理模式:所謂代理,其實就是第三方角色。可以這麼說吧,我們把房屋中介作爲第三方機構,那麼我們作爲租客,房主在外地的時候可以不通過直接接洽來跟我們談,而    讓中介直接與我們談,就可以了。中介充當了一個代辦的角色了。


繼承:

class Father

{

String name; 

}

// 上面這個類是作爲父類的角色

 class Son extends Father

{

// Son作爲Father的子類,則擁有了Father的屬性與方法。

}

// 實現如下

Father father = new Father();

father.name= "張三“; // 張小明的父親

Son son = new Son();

son.name = "張小明"; // 張小明自己


儘管Son類中沒有定義name屬性,但由於使用了extends關鍵字實現了類的繼承技術,所以Son對象擁有了Father的name屬性——


方法重寫:

class Car

{

public void run()

{

System.out.println("Car 在run...”);

}

}


class Benz extends Car

{

@Override

public void run()

{

System.out.println("benz 在run....");

}

}


上面的代碼就是Benz類的run方法重寫了Car中的run方法——

final修飾屬性:這個屬性就變成了常量,不允許二次賦值。

final int count = 10;

count = 20 ;// 錯誤,因爲count已經變成了常量,不允許再次賦值了。


final修飾方法:這個方法所在的那個類,如果有子類,那麼它的子類是不能重寫這個final方法的,而只能重載它!!因爲重載的本質是使用,而重寫的本質是改寫。

final void request()

{

// 這個方法只能被其子類的對象的request方法是重載的,而不能是重寫——

}


final修飾類:被這個關鍵字修飾的Java類是一個終態類,即:該類沒有子類的。

final class MyTools

{

// 建議把這些方法都定義爲static的,這樣一來調用就很方便了。

}


Object類,這個類是所有Java類的父類來的。

equals方法:比較兩個對象是否相等,但有一個前提條件:

①、如果是字符串對象,那麼它在源碼裏面就重寫了equals方法,所以比較的是兩個字符串對象的內容是否相等。

②、如果是Object類型的對象,必須要重載equals方法才能比較兩個對象的內容是否相等,否則的話還是比較兩個對象的地址是否指向同一個目標。


hashCode方法:該方法返回這個對象在哈希表中存儲的位置,它是一個整數@十六進制的數值。

【一般而言,重寫了equals方法就必須要重寫hashCode方法,這樣一來可以更好地實現兩個對象之間的比較!】


工廠模式

// 根據傳遞進來的名稱的類型來生成不同的對象——

public Object createObject(String name)

{

if(name.equals("apple"))

{

return  new Apple();

}

else if(name.equals("banana"))

{

return new Banana();

}

else(

return null;

)

}

class Apple

{

String name = "apple";

}

class Banana

{

String name = "banana";

}


代理模式——

interface Subject

{

pubic void request(String name , String things);

}


class RealSubject implements Subject

{

@Override

public void request(String name , String things)

{

System.out.println(name + " ->" + things);

}

}


public class Result 

{

private Subject subject ;

public Result(Result result)

{

this.result = result ;

}

public void request(String name , String things)

{

result.request(name,things);

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章