標籤:類 對象 構造器 this
1. 類
1)是同類型東西的概念,是對現實生活中事物的描述,映射到Java中描述就是class定義的類。
2)其實定義類,就是在描述事物,就是在定義屬性(變數)和方法(函數)。
3)類中可以聲明:屬性,方法,構造器;
屬性就是執行個體變數,用於聲明對象的結構的,在建立對象時候分配記憶體,每個對象有一份!
執行個體變數(對象屬性)在堆中分配,並作用於整個類中,執行個體變數有預設值,不初始化也能參與運算。
4)類與類之間的關係:
① 關聯:一個類作為另一個類的成員變數
public class A {
pulic B b ;
}
class B { }
② 繼承:
public class B extends A { }
class A { }
③依賴:個別方法和另一個類相關。
public class A {
public void f(B b) { } //參數裡有類B
public B g() { } // 傳回值裡有B
}
class B { }
為什麼要引入類?
先看一個案例:
需求:實現員工資訊管理,將員工資訊中的下列幾項資料(姓名、性別、年齡、薪水), 儲存在資訊管理系統中進行操作,然後輸出這個員工的資訊。
案例1:
650) this.width=650;" title="01 clipboard.png" src="http://s3.51cto.com/wyfs02/M00/6D/39/wKiom1VensHivg-cAAEvQH9hhLc973.jpg" width="669" height="269" alt="wKiom1VensHivg-cAAEvQH9hhLc973.jpg" />
上述輸出的是一個員工資訊,要是實際公司專屬應用程式中,是有很多的,怎麼操作,像下面的那樣?
案例2:
650) this.width=650;" title="02 clipboard.png" src="http://s3.51cto.com/wyfs02/M00/6D/34/wKioL1VeoNWgcg5nAAKqrkqFlLo669.jpg" width="645" height="469" alt="wKioL1VeoNWgcg5nAAKqrkqFlLo669.jpg" />
顯然,已經不能滿足實際的需求了,所以,有了物件導向程式設計。
類設計步驟:
第一步:分析這些對象的特徵,然後進行資料類型的抽象,所謂抽象資料類型可以理解為:將不同類型的數 據的集合組成個整體用來描述一種新的事物。
第二步,根據需求定義類的構造器,構造器是用來給類的屬性進行初始化賦值的。
第三步:分析這些對象的行為或者是可以實施的操作等,定義成方法。
這樣完成了一個類的設計,再根據設計編寫這個類即可。
案例3:Emp實體類
650) this.width=650;" style="width:674px;height:436px;" title="03 clipboard.png" src="http://s3.51cto.com/wyfs02/M01/6D/34/wKioL1VeogCB9T0xAAHVae9wT-k376.jpg" width="711" height="471" alt="wKioL1VeogCB9T0xAAHVae9wT-k376.jpg" />
總結:類是用於構建對象的模板,對象通過類執行個體化產生,一個類可以建立多個對象,每個對象擁有自己的資料(屬性)和行為(方法)。
2. 對象
對象是一個客觀存在的、唯一的實體,是物件導向編程過程中分析與解決問題的出發點與基礎。對象的實質就是記憶體中的一Block Storage地區,其資料結構由定義它的類來決定。其本質就是資料。
對象建立的堆棧圖
650) this.width=650;" title="00 OQ$HE{E)GTUJ.png" src="http://s3.51cto.com/wyfs02/M01/6D/34/wKioL1VeorOQKaDvAAGKOL2XxL8095.jpg" width="519" height="377" alt="wKioL1VeorOQKaDvAAGKOL2XxL8095.jpg" />
3. 物件導向的核心特徵:封裝、繼承、多態
封裝:就是將一個類的使用和實現分開,只保留部分介面和方法與外部聯絡;
繼承:子類繼承其父級類中的屬性和方法,並可以添加新的屬性和方法或者對部分屬性和方法進行重寫,繼承增加了代碼的可重用性;
多態:多個子類中雖然都具有同一個方法,但是這些子類執行個體化的對象調用這些相同的方法後卻可以獲得完全不同的結果,多態性增強了軟體的靈活性。
4. 構造方法
構造方法也叫構造器。
1)構造器的名稱必須與類名同名,包括大小寫。
2)構造器沒有傳回值,但也不能寫void,也不能寫return。
3)構造器的參數一般和執行個體變數一致,是初始化對象的前提條件。
4)用new調用!且對象一建立,構造器就運行且僅運行一次。一般方法可被調用多次。
5)類一定有構造器!這是真的,不需要質疑!
6)如果類沒有聲明(定義)任何的構造器,Java編譯器會自動插入預設構造器!
7)預設構造是無參數,方法體是空的構造器,且預設構造器的存取權限隨著所屬類的存取權限變化而變化。如,若類被public修飾,則預設構造器也帶public修飾符。
8)預設構造器是看不到的,一旦自己寫上構造器則預設構造器就沒有了,自己寫的叫自訂構造器,即便自己寫的是空參數的構造器,也是自訂構造器,而不是預設構造器。
9)如果類聲明了構造器,Java編譯器將不再提供預設構造器。若沒手動寫出無參構造器,但卻調用了無參構造器,將會報錯!
10)構造器是可以重載的,重載的目的是為了使用方便,重載規則與方法重載規則相同。
11)構造器是不能繼承的!雖說是叫構造方法,但實際上它不是常說的一般方法。
5. this關鍵字
在構造器裡面,經常會出現this關鍵字,代當前對象,即哪個對象調用此構造器,指的就是哪個對象。
this的用法:
1)this.成員變數 ---訪問成員變數
2)this() ---調用本類的構造方法(一般是用於構造器中調用另外一個構造器)
案例4:
650) this.width=650;" title="04 clipboard.png" src="http://s3.51cto.com/wyfs02/M00/6D/39/wKiom1Veo4jhJk4XAAHtyGkesBg422.jpg" alt="wKiom1Veo4jhJk4XAAHtyGkesBg422.jpg" />
本文出自 “永遠年輕” 部落格,請務必保留此出處http://kingkongzhao.blog.51cto.com/6319491/1653805
Java物件導向學習筆記 -- 1(類、對象、構造器)