黑馬程式員--java基礎--物件導向

來源:互聯網
上載者:User

標籤:

                                                               ------- 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基礎--物件導向

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.