導讀
繼承:其實說白了就是代碼的重用組件(代碼段組合)。使用繼承可以用子類完成父類的任務,並且子類可以完成自己的業務。意思其實已經很明確了,在生活上,子女可以繼承父母的財產。
方法重寫:重寫,是基於繼承關係的基礎上的。所謂重寫,其實就是覆蓋的意思,我把方法全部更改了代碼體的內容。比如,我有一個方法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);
}
}