Java物件導向的程式設計

2021-08-08 15:53:49 字數 3875 閱讀 5333

1.陣列以控制代碼的方式來管理記憶體

2.方法的overload(物件導向的性質,以多型的形式)

只允許根據引數列表(引數型別、個數、順序等)進行區分,那為什麼不能根據返回值型別進行區分呢?

因為在呼叫方法時候,一定要能體現出來其特徵。

類的封裝

類似於開車與汽車的原理

(1)把資料和方法緊密繫結在一起

(2)從外面看,僅知道一些介面,但不知道介面的具體如何操作

優點:隱藏細節

那麼為什麼要封裝呢?

因為除了隱藏細節,更需要保證自身邏輯的完整性

一般需要定義成員變數(屬性)和成員方法

private是私有成員,不能被外部類訪問 ——隱藏資訊

為了訪問私有成員,需要定義public方法 ——封裝

舉個栗子:

比如這程式,未進行封裝,取值超出了範圍,未能保證邏輯完整性。

關於構造方法:

(1)名與所在類一致

(2)沒有返回值型別

說明:如果沒有定義,系統預設呼叫此方法

類在使用前,必須使用new()建立,public是可以通過實力物件訪問,private對外部不可見。

上圖程式,如果不定義則初始化能否呼叫?

否,因為在程式中還有其他建構函式,並不會呼叫系統預設的建構函式。

static關鍵字:「靜態」:分配的位址是固定不變得

定義一些與類無關的變數和方法時,使用static關鍵字

即使沒有建立那個類的乙個例項物件也可以呼叫乙個static方法或者訪問乙個static變數

static的變數或方法在程式初始化之前分配空間,而其他變數或方法在程式執行中動態分配空間。使用「類名.方法名」的方式可以直接呼叫static方法。比如 常用的math類

例如:public static void main(string args) 虛擬機器需要找到整個程式的入口點,如果因為main所在的class沒有生成物件,導致main無效,那程式就無法啟動了。

一些基本資料型別的封裝類:

類的初值

(1)利用overload構造方法

(2)利用set、get方法

友誼成員

變數或者方法之前沒有訪問修飾字,則成為友誼成員或者套件訪問,只能訪問當前包

單例模式:在記憶體中只有乙個例項

例如:

class singleton

public

static singleton getinstance()}}

return instance ;}}

singleton的特點是由類自己來保證例項的唯一性

類的繼承

繼承的思想:

先定義乙個包含公用方法和公用變數的類做為父類,在此基礎上建立具有專用方法和專用變數的的類作為子類,方便程式設計。

預設的父類為 object類

繼承能夠體現出父類和子類物件的一種邏輯聯絡

父類的構造方法不能被繼承,其private成員變數和成員方法不能被子類繼承,雖然不能繼承,但是在記憶體中依然存在,可以間接訪問到。protected成員可以被子類訪問。super表示「父類的」

說明:子類在繼承父類後,其方法只能擴大所繼承的範圍,即 只能把protect改為public,不可以把protect改為private

舉個栗子1:

public

class

equals

}

輸出結果為:

false

true

舉個栗子2:

class integer

}public

class equals2

}

輸出結果:

false

false

雖然我們常常使用equals()方法進行比較值,但是它預設是比較控制代碼的,很多封裝類的比較值得實現,其實都是自己重寫的equals()方法。總結一波,equals()方法的預設行為時比較物件的控制代碼,如果是自定義的類,需要override equals()方法。

關於tostring()方法

先上**,栗子1:

class tostringclass

}public

class

tostringtest

}

輸出結果為:

100

tostringclass@74a14482

tostringclass@74a14482

栗子2:

class tostringclass

}public

class

tostringtest

}

輸出結果為:

100

i=100

i=100

顯然栗子2比栗子1只差乙個自己重寫的tostring()方法,,可以得出結論:

(1)或取控制代碼的字串屬性時候,jvm會自動呼叫其tostring()方法

(2)tostring()方法繼承於object,有時候需要重寫一波

注:不同型別的例項進行賦值時,只允許將子類的例項賦給父類的控制代碼。因為物件導向描述的是現實中的事物,有一定邏輯在裡面。

類的多型

主要體現:方法的override、upcasting、downward cast

upcasting栗子:

class upper

}class down extends upper

}public

class

test

public

static

void

main(string args)

}

輸出:

down.f()

downward cast栗子:

public

void

dosomething(employee e)

system.out.println("this is the manager 0f"+m.getdepartment)

}

upcasting和downward cast異同點:

相同:

(1)用父類做形參

(2)子類做實參傳遞

(3)執行子類的方法

不同:

呼叫父類和子類共同的方法時,upcasting用的是父類就已經有的方法,而downward cast ,用於呼叫父類無子類有的方法

關於 抽象類、介面、內部類

抽象類:abstract class,不能被例項化為物件。只能被繼承使用,抽象類被繼承後,必須將所有的抽象方法實現,否則子類依然是抽象類。

抽象方法:(1)abstract關鍵字(2)只有方法名,沒有方法實體

擁有抽象方法的的類一定是抽象類。

內部類:inner class

介面:inte***ce

使用關鍵字 inte***ce定義,介面中的變數都是final static,介面中沒有構造方法,並且定義的成員方法都是抽象方法(預設為abstract),採用多重繼承機制。

實現乙個介面就具備介面所定義的某個能力或特性

舉個栗子:

java物件導向程式設計

抽象及封裝 簡述抽象和封裝 1 為什麼使用物件導向?現實世界就是 物件導向的 世間萬物皆物件,物件導向就是採用 現實模擬 的方法設計和開發程式。2 物件導向設計的過程就是抽象的過程,分一下3步 1 發現類 2 發現類的屬性 3 發現類的方法 3 類圖 this通常指當前物件的引用,它可以呼叫當前物件...

java物件導向程式設計

物件導向程式設計 object oriented programming 簡稱oop 什麼是物件導向程式設計 世界萬物皆物件,一切都是物件!1,類 是對一類事物的抽象描述,注意 在程式裡面定義好乙個類以後,並不能真正的執行,如果要使類發揮效果執行起來,必須建立物件 類包含屬性和方法 構造方法 是在建...

java物件導向的程式設計

1 練習題 類的成員變數 猜數字遊戲 乙個類a 有乙個成員變數 v,有乙個初值 100。定義有乙個類,對 a類的成員變數 v進行猜。如果大了則提示大了,小了則提示小了。等於則提示猜測成功。package lei public class a void speedup this.speed speed...