標籤:
------- android培訓、java培訓、期待與您交流! ----------
物件導向的概述:
舉例裝大象到冰箱。而談物件導向,就一定要說說面向過程。
面向過程:開啟冰箱,裝入大象,關上冰箱。這三步就是面向過程的思考方式,這種思想強調的是過程,也可以叫做動作。在C中是這種方式
物件導向:冰箱開啟,冰箱儲存,冰箱關閉。這就是物件導向的思考方式,這種方式強調是對象,也可以說是執行個體。在java,C++,C#中使用。
物件導向的特點
1、物件導向的思想符合人們慣有的思考方式。
2、物件導向的出現,將問題簡單化
3、物件導向將過程中的執行者,變成了對象的指揮者。
類和對象的關係:
簡單說就是:
類:對事物進行描述,對於事物的描述通常有屬性和行為兩個方面,只要明確它們並且定義在類中即可
對象:就是該類事物的執行個體,就是該類事物實實在在存在的個體
對象是通過關鍵字new來建立的。
匿名對象的使用條件:
條件一:當對對象方法只調用一次時,可以用匿名對象來完成,這樣比較簡化。
條件二:可以將匿名對象作為實際參數進行傳遞。
對象在記憶體中的調用方式:
通過new建立一個對象,在堆記憶體中就出現一個對象,對象含有地址指標,還有通過建構函式初始化的預設值。棧記憶體通過對象指向堆記憶體的地址指標進行調用對象。
類中的成員變數和局部變數的區別:
1.
成員變數定義在類中,整個類都可以進行訪問。
局部變數定義在函數,語句,局部代碼塊中,只有在所屬的地區才能有效訪問。
2.
成員變數存在堆記憶體的對象中。
局部變數存在棧記憶體的方法中。
3.
成員變數隨著對象的建立而存在,隨著對象的消失而消失。
局部變數隨著所屬地區的執行而存在,隨著所屬地區的結束而釋放。
4.
成員變數都有預設初始化值。
局部變數沒有預設初始化值。
類類型變數的特點:
類類型變數一定指向對象,否則是null。
物件導向三大特徵:
物件導向三大特徵:封裝 繼承 多態
1.封裝:是指隱藏對象的屬性和實現細節,僅僅對外提供公用訪問方式。
好處:
1.將變化隔離。
2.便於使用
3.提供代碼重用率
4.提高安全性
封裝的原則:
1.將不需要對外提供的內容都隱藏起來。
2.把屬性都隱藏,提供公用訪問方式對其進行訪問
2.繼承:1. 提高代碼的複用性;2. 讓類與類之間產生了關係,有了這個關係,才有了多態的特徵。
注意:千萬不要為了擷取其他類的功能,簡化代碼而繼承,必須是類與類之間有所屬關係才可以繼承。
在Java中:
java只支援單繼承,不支援多繼承。
因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能,當功能內容不同時,子類對象不確定運行哪一個。但是java保留這種機制,並用另一種體現形式來完成表示:多實現
java支援多層繼承,也就是一個繼承體系。但是如何使用一個繼承體系中的功能呢?
想要使用體系,先查閱體系中父類的描述。因為父類中定義的是該體系中的共性功能,通過瞭解共性功能,就可以知道該體系的準系統,那麼這個體系已經可以基本使用了。
那麼在具體調用時,要建立最子類的對象,為什嗎?
一是因為有可能父類不能建立對象;二是最子類實現的功能最多。
繼承中子父類中類成員的特點。
類成員:
變數
1.子類中出現非私人的同名變數時,子類要訪問本類中的變數,用this
2.子類要訪問父類中的同名變數,用super
函數
1.當子類出現和父類相同的函數時,當子類對象調用該函數,會運行子類函數的內容,如同父類的函數被覆蓋一樣,這種情況是函數的一個特徵:重寫(覆蓋)。
2.當子類繼承父類,沿襲了父類的功能到子類中,但是子類雖具備該功能,但是功能的內容卻和父類不一致,這時,沒必要定義新功能,二是使用覆蓋方法,保留父類的功能定義,並重寫功能內容。
覆蓋細節:
子類覆蓋父類,必須保證子類許可權大於等於父類許可權,才可以覆蓋
靜態只能覆蓋靜態,非靜態都能覆蓋
重載:類名和方法都相同
重寫:子父類方法要相同
建構函式:
在對子類對象進行初始化,父類的建構函式也會運行,那是因為子類的建構函式預設第一行有一條隱式的語句super();
super();會訪問父類空參數的建構函式,而且子類中所有的建構函式預設第一行都是super();
為什麼子類一定要訪問父類中的建構函式?
父類中的資料,子類直接擷取,所以子類對象在建立時,需要先查看父類是如何對這些資料進行初始化的。所以子類在對象初始化時,要先訪問父類中的建構函式。如果要訪問父類中指定的建構函式,可以通過定義super語句的方式來指定
注意: super語句一定定義在子類建構函式的第一行。
子類的執行個體化過程。
1、子類中所有的建構函式都會預設訪問父類中的空參數的建構函式,因為每一個子類構造內第一行都有預設的語句super();2、若父類中沒有空參數的建構函式,那麼子類的建構函式內,必須通過super語句指定要訪問的父類中的建構函式;3、若子類建構函式中用this來指定調用子類自己的建構函式,那麼被調用的建構函式也一樣會訪問父類中的建構函式。
3.多態:事物存在的多種體現形式。
多態也是java的一個很重要的部分,就是一個方法名可以用多次,具體根據參數的不同來分辨你調用哪個方法,通俗的解釋多台就是,假如有個方法名叫:“動物的叫聲”
那麼,當你傳遞的參數是動物狗,則調用狗叫聲,是貓,則調用貓叫聲,這就是多態。
多態分為兩種:通用的多態和特定的多態。兩者的區別是前者對工作的類型不加限制,允許對不同類型的值執行相同的代碼;後者只對有限數量的類型有效,而且對不同類型的值可能要執行不同的代碼。
通用的多態又分為多重參數變形(parametric)和包含多態(inclusion);特定的多態分為過載多態(overloading)和強制多態(coercion)。
class Test{ void print() { System.out.println("hello Test"); } public static void main(String []args) { A a=new A(); a.print(); }}class A extends Test{ void print() { System.out.println("hello A"); }}
以上就是一個動態多態。
class Test{ void print() { System.out.println("hello world"); } void print(int x) { System.out.println("hello world"+i); } public static void main(String []args) { Test ts=new Test(); ts.print(); ts.print(10); }}
靜態多態。
A a=new B();if(a instanceof B)System.out.println("a instanceof B");
簡單來說就是這樣的多態例子!
黑馬程式員--java基礎--物件導向