二、Java物件導向(3)_類和對象

來源:互聯網
上載者:User

標籤:bubuko   電腦   預設   www   基本   lse   技術   eset   類的繼承   

2018-04-29

 

類和對象

 

一、什麼是抽象

  在電腦科學中,抽象是一種過程,在這個過程中,資料和程式定義的形式與代表的內涵語言相似,同時隱藏了實現細節。

  抽象:一個概念或者想法不和任何特定的具體執行個體綁死。

    

  簡單地說:“抽象只從正確的角度,透露對象的某些相關細節。”

  在物件導向編程理論中,抽象涉及到定義抽象對象的語言基礎,它到底如何工作、如何擷取和改變狀態,並與系統中的其他對象進行“交流”。

  抽象在任何程式設計語言中的許多方面起作用。從建立子程式到定義介面來,產生低級語言調用,例如設計模式

  

  參考部落格

 

二、對象和類的關係

  1.對象

    狀態(屬性)

    行為(功能)

 ---------------------------------------------------------------------------------------------------------------------------

    在現實中任何存在的事物都可以看成對象 通過其屬性進行分類

    比如生物包括動物等不同種類,動物又分貓科等 貓科又分特定物種
    而每一個對象都是一個單獨的個體,就好像世界上不存在兩個你

    在程式中也是如此,類的繼承就好像生物包括動物、動物包括貓科這樣
    而對象也是通過不同的類來建立出來的單獨的個體

    類之間只存在繼承關係(extends ) 就和上邊說的 生物包括動物 動物包括貓科
    而介面相當於擁有能力 一個生物可以擁有很多能力 但是他只屬於一個類別
    所以說只有介面才可以implements

    對此 你也可以理解為extends過來的是父母教的 implements 是自學成才。

------------------------------------------------------------------------------------------------------------------------------

    通過對多個同類型的對象分析,我們可以把對象抽象成類。

 

  2.類

    具有相同屬性(狀態)和行為(功能)的對象的抽象就是類。  類實際上是一種資料類型。

    因此,對象的抽象是類,類的具體化是對象(類的執行個體化就是對象)。

 

    類具有的屬性也就是對象的狀態,使用成員變數定義,用來封裝資料。

    類具有的功能也就是對象的行為,定義在方法裡面。

 

    類是對象的模板/類型。建立一個對象,就是使用類作為構建該對象的基礎。描述類少不了對象,描述對象也少不了類。“先有雞還是先有蛋”。

    在物件導向編程裡,先有類才有對象,如果沒有類對象無法執行個體化。

    對象是類的執行個體,類是對象的模板。(根據模板來建立執行個體)

 

三、類的定義

  [修飾符] class 類名{

    //定義成員變數(欄位/field)

    //定義成員方法

  }

 

    

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  定義類的注意事項:

  1)如果類使用了public修飾符,則當前檔案名稱必須與類名相同。

  2)類名最好使用名詞表示,因為類表示一類事物。類名首字母大寫,如果是多個單片語成則使用駝峰標記法命名,如:EmployeeSetting

  3)在物件導向學習過程中,專門為描述對象提供一個類,該類不需要main方法,我們再專門定義一個測試類別用來運行程式。

 

四、對象基本操作

 

a)對象的建立和使用

  1.(根據類)建立對象的文法:

    類名  變數 =  new 類名();

  2.給欄位設定值

    物件變數.欄位名 = 該類型的值;

  3.擷取欄位值

    該欄位類型 變數 = 物件變數.欄位值;

  4.通過對象調用方法

    物件變數.方法名([實參]);

 

  

 

b)對象的執行個體化過程

  先為對象分配空間,並按屬性類型預設初始化
  ps:八種基礎資料型別 (Elementary Data Type),按照預設初始化,其他資料類型預設為null

  

  不同類型的成員變數的初始值:

  

 

 

  對象執行個體化記憶體分析:

  

 

 

c)對象的生命週期

   對象的列印操作:object的toString方法

   對象的比較操作:“==”對於基礎資料型別 (Elementary Data Type)比較的是值,對於參考型別比較的是記憶體中的地址值

            如果對象擁有完全相同的資料,想讓他們相等,使用object的equals方法

   對象的生命週期:

    開始:使用new建立對象的時候,記憶體中就會分配一個空間

    結束:當堆中的對象沒有被任何變數引用,此時改對象就成了垃圾,等著被記憶體回收行程(GC)回收垃圾,當改垃圾被回收的時候,對象就被銷毀了。(回收垃圾的目的是為了釋放更多的記憶體空間)

 

d)匿名對象

  沒有名稱的對象,建立對象之後沒有賦給一個變數。

  new Servant();//匿名對象只是在堆中開闢一塊新的記憶體空間,但是沒有把該空間的記憶體位址賦給任何變數

  因為沒有名稱,所以匿名對象只能使用一次。

------------------------------------------------------------------------------------------------------------

 

普通申明一個對象是這樣的
A a = new A();
那麼這個時候a就是類A的一個對象,這個對象名字就是a
再來看下面一個例子:
method(A a);
整理method是一個方法,他需要傳遞一個對象來作為參數,那麼這個時候有2種方法:
方法1:
A a =new A();
method (a);
方法2:
method (new A());

方法2中new A()就是一個匿名對象,他沒有名字。這樣可以理解了吧。

 

--------------------------------------------------------------------------------------

  匿名對象的用法:

  1)當對象的方法只調用一次時,可以用匿名對象來完成,這樣寫比較簡化。

 

    如果對一個對象進行多個成員的調用,就必須給這個對象起個名字。

 

   2)匿名對象使用方法二:可以將匿名對象作為實際參數進行傳遞。

 

 

e)學生繳費案例

  學生類(Student)有兩個欄位:name(名字)和isFee(是否交學費的狀態),有一個方法交學費(fees)。

  每一個學生都是通過Student類new出來的一個對象,現在建立一個數組存放多個學生對象,再判斷數組中的學生是否已經交費,如果沒有則調用交學費的方法。

 

代碼實現:

 1 class Student 2 { 3     String name;//名字 4     boolean isFee = false;//是否交費,預設未交費 5  6     //定義交學費的方法 7     void fees(){ 8          isFee = true; 9     }10 }11 12 13 //測試類別14 public class TestDemo15 {16     public static void main(String[] args){17         18         Student s1 = new Student();19         s1.name = "李白";20         s1.isFee = true;21 22         Student s2 = new Student();23         s2.name = "魯班";24         25 26         Student s3 = new Student();27         s3.name = "張三";28         s3.isFee = false;29 30         Student s4 = new Student();31         s4.name = "李軍";32         s4.isFee = true;33 34         //建立數組用來存放多個學生對象35         Student[] arr = new Student[] {s1,s2,s3,s4};36         //使用for-each迴圈迭代數組元素37         for(Student ele : arr){38             //System.out.println(ele.name + "," +ele.isFee);39 40             //判斷是否交費,如果沒有交費則調用fees方法41             if(!ele.isFee){42                 ele.fees();43             }44         }45         for(Student ele : arr){46             System.out.println(ele.name + "," +ele.isFee);47         }48 49     }50 }

 

 輸出結果:

 

 記憶體分析:

 

二、Java物件導向(3)_類和對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.