黑馬程式設計師 物件導向 學習(二)

2021-06-26 14:50:58 字數 4042 閱讀 6429

一,**塊

1)區域性**塊,寫在區域性方法中

2)構造**塊,寫在類中,優先於構造方法執行,屬於物件,可以進行物件呼叫

3)靜態**塊,寫在類中,屬於類,可以進行類名呼叫

**演示:

class codedemo 

//靜態**塊

static{

}//優先執行 只執行一次 僅僅一次

}}

二,繼承

1)定義:就是說子類擁有父類的成員(但不是全部)

好處:減少**,提高效率,是類與類之間形成一種子類繼承父類的關係,這也產生了物件導向的第三大特點:多型

特點:單繼承,乙個子類只能繼承乙個父類,不能繼承多個。但是乙個父類可以有多個子類

雖然只能單繼承,但是可以多層次繼承  ,父類所擁有的成員,子類都可以擁有(不是全部)

繼承的體系:由於存在有個子類,可以提取子類的共性,形成父類,繼承父類

學習繼承體系的時候,學習頂層類,建立底層類的物件

當你分析實物的時候,發現這個實物是另乙個實物的一種,那就使用繼承 

2)extends 關鍵字

意思是:擴充套件,延伸

繼承的定義格式: 子類 extends 父類    class a  extends  b

**演示: 

實現繼承,父類和子類的成員方法的變化表現

*/class fu

}class so extends fu

}class extendsdemo1

}

三,繼承後,子類和父類的成員變數特點:

1)方法有,用自己的就近訪問原則

2)方法中沒有,那就使用本類的成員,就是子類的成員

3)如果子類沒有那就訪問父類的成員,父類沒有編譯失敗

4)super關鍵字,它表示的不是丟父類物件的引用,而是對父類儲存的呼叫,用來訪問父類成員

5)成員變數是靜態,就進行類名呼叫

**演示:

/*

實現繼承父類和子類的成員變數的變化表現

*/class fa

class so extends fa

}class extendsdome

}

四,繼承後,子類和父類的成員方法特點:

1)子類和父類中出現一模一樣的方法,子類的方法就重寫了父類的方法(override)保證子類的訪問許可權一定大於等於父類的訪問許可權

2)如何判斷是否重寫:

訪問許可權,靜態,返回值,引數

**演示:

/*

繼承後,子類,父類成員方法的特點

*/class fu

}class zi extends fu

*/ //降低了父類的許可權 private void show(){}

//不可以,父類方法非靜態 public static void show(){}

//可以編譯通過,不是重寫,父類方法無引數 public void show(int a){}

//編譯失敗,返回值型別不相容 public int show()

//編譯通過,父類方法過載 private double show(char c)、 }

class extendsdemo3

}

五,繼承後,子類和父類構造方法的特點:

1)子類所有的構造方法中,第一行是super();預設訪問父類的空引數構造方法

2)保證所有子類的構造方法都能訪問到父類的構造方法

3)如果父類中沒有空參的構造方法,那麼不在子類中學super();編譯失敗

4)this();和super();都要第一行,所以他們同事存在乙個構造方法中

**演示:

/*

**演示 構造方法中的不同

*/class a

*/ a(int i)

}class b extends a

b(int i)

}class extendsdemo2

}

六,final 關鍵字

1)修飾符,可以修飾類,叫最終類,不能被繼承

可以修成員方法,不能被子類的方法重寫

可以修飾區域性變數,被修飾的區域性變數不能再改變

可以修飾成員變數,固定的值不是預設值,是手動賦的,或者利用構造方法賦的,普通方法不行,應為構造在建立物件的過程,而普通方法已經建立物件,變數名全部大寫

七,多型中的型別轉換

1)父類  變數名=new 子類,這是乙個隱身轉型,由小的轉型到大的

2)呼叫子類的特有內容必訓強制轉換  格式   子類  變數=(子類)變數(是子類多型的變數)

3)類在強制轉換的時候,指的乙個引用,是不是指向乙個物件,如果不是就造成型別轉換異常,這時使用關鍵字 instanceof進

行比較運算, 格式:  引用型別 instanceof 類,執行結果是布林型別

**演示:

/*

養貓,寵物案例

繼承的思想,共性抽取

相同的成員變數,資料型別,名字

相同的成員方法,返回值,名字,引數列表

*///共性內容,吃的方法,抽取形成乙個父類

//animal是cat和dog的父類,最共性的內容

class animal

}class cat extends animal

public void catchmouse()

}class dog extends animal

public void lookhouse()

}class duotaidemo5

public static void eat(animal d)else if(d instanceof dog ) }}

八,多型的細節

1)除了非靜態成員方法編譯看父類,執行看字類,其它都是編譯看父類,執行也看父類

**演示:

/*

多型在編譯時期的細節

*/class a

}//除了 非靜態的成員方法 是執行的子類的 其他都是父類的 如果沒有就編譯不過去

class b extends a

}class duotaidome4

}

九,抽象類

1)抽象方法:當說不清,道不明的時候,發現方法沒有實際的意思,就使用抽象方法

定義格式:使用 abstract       修飾符  anstract  viod 方法名();這裡一定不能寫大括號,否則編譯失敗,抽象方法,必需存

在於抽象類中,所以類名前必須加 abstract 修飾,否則編譯失敗

用法:抽象類不能例項化,只能讓子類繼承,重寫抽象方法,建立子類物件,如果子類只重寫了部分抽象方法或者沒有重寫抽

象方法,那子類還是乙個抽象類

特點:a)抽象類,中有構造方法,應為每個類中必須有構造方法

b)抽象類中可以有普通方法,子類繼承後可以直接使用

c)抽象類中可以有靜態方法,直接類名呼叫

d)抽象類中可以沒有抽象方法,應為抽象類,不可以例項化

十,anstract 的不可以和那些關鍵字並存

1)final,抽象方法必須讓子類重寫  final,不能被繼承

2)private,抽象方法必須讓子類重寫,私有了,不能被繼承

3)static,可以直接類名呼叫,但是抽象類中沒有方法體

十一,模版方式

獲得乙個程式從開始到結束的執行時間,呼叫system類的方法

**演示:

/*

利用抽象方法 實現乙個程式開始到結束的執行時間

*/abstract class gettime

public abstract void code();//暴露乙個方法,等待子類的重寫

}class a extends gettime }}

class b extends gettime }}

class demotest6

}

黑馬程式設計師 物件導向學習

1.類 物件。人 是類,張三 是 人 這個類的物件。類是抽象的,物件是具體的。按鈕就是類,某個按鈕就是物件。物件可以叫做類的例項 instance 類就像int,物件就像10。欄位field 和某個物件相關的變數 字段就是類的狀態。人這個類有姓名 年齡 身高等字段。類不佔記憶體,物件才佔記憶體。2....

黑馬程式設計師 物件導向

物件導向 1 物件導向 是基於面向過程的一種思想。面向過程 以函式為基礎,關注實現過程。物件導向 以物件為基礎,關注實現結果。2 物件導向的思想特點 a 是一種更符合人們思考習慣的思想。b 把複雜的事情簡單化了。c 把我們從執行者變成了指揮者。舉例 買電腦。洗衣,做飯。旅遊。把大象裝進冰箱。體現 c...

黑馬程式設計師 物件導向

物件導向是一種思想,把複雜事物簡單化,把面向過程的執行者變成了指揮者。過程其實就是函式,而物件將函式和一些內容封裝。把事物的屬性和行為封裝成物件,再把物件抽象成類。類的訪問修飾符有public和final。而成員的修飾符有public private protected static 成員變數和區域...