第三章 物件導向(一) 類與物件

2021-06-19 06:11:25 字數 3554 閱讀 6113

1、基本概念

(1)過程與物件都是一種解決問題的思想。

面向過程:強調的是功能行為,一種過程

,先乾啥

,再幹啥;

物件導向:將功能封裝到物件裡,強調的是具備某功能的物件;

(2)物件導向的三個特徵:封裝(encapsulation)

、繼承(inheritance)

、多型(polymorphism)。

2、類與物件

(1)關係:類是物件的抽象,而物件是類的具體例項

類:表示乙個客觀世界某類群體的一些基本特徵的抽象

物件:是表示乙個個具體的東西

(2)類的定義

[修飾符

] class  類名

1~n個構造方法;

0~n個字段(

field);

0~n個方法;

1)修飾符:可省略,或是

public

、final

、abstract

中的乙個

2)構造方法:用來構造類的例項(預設有乙個無參的構造方法,得使用

new呼叫)

格式:[

修飾符] 

構造方法名(形參列表)

修飾符:可省略,或是public

、protected

、private

中的乙個

構造方法名:必須與類名相同

【注】:a、其宣告處不能有任何返回值型別的宣告

b、不能使用

return

返回乙個值;(

return

;可以)

3)field

(成員變數|字段

|域):類或物件所包含的資料,對類狀態的一種描述

格式:[

修飾符] field

型別 field名[=

預設值];

修飾符:可省略,或是public

、protected

、private

中的乙個,

static

,final

4)方法:類或物件的特徵和行為

格式:[

修飾符] 

方法返回值型別 方法名(形參列表)

修飾符:可省略,或是public

、protected

、private

中的乙個,

static

,final|abstract

(3)物件的定義、建立和使用

a、格式:類名  物件名稱= new 

類名();//其實是兩步操作

類名  物件名稱 ;     //宣告物件

物件名稱 =  new 

類名();     //例項化物件

b、物件名

儲存在棧記憶體(訪問位址)中,物件的具體內容儲存在堆記憶體

c、「物件名

.物件成員」的方式來操作物件中的內容

訪問屬性:物件名.

屬性名;

訪問方法:物件名.方法名

(3)匿名物件

定義:不定義變數引用物件,使用new

關鍵字建立物件後直接使用,這樣的物件沒有名字,所以叫匿名物件

。特點::a、匿名物件只進行一次呼叫,而且它只在堆記憶體中開闢空間,而沒有在棧記憶體的引用。當物件對成員進行多次呼叫時,不能使用匿名物件,必須給物件起名字。b、可作為實際引數進行傳遞。new car().show(new car());

(4)成員變數和區域性變數的區別:

1:成員變數直接定義在類中,整個類中都可以訪問;區域性變數定義在方法中,引數上,語句中,只在所屬的區域上有效。

2:成員變數存在於堆記憶體中,隨著物件的產生而存在,消失而消失。區域性變數存在於棧記憶體中,隨著所屬區域的執行而存在,結束而釋放。

3、成員變數都有預設初始值,而區域性變數則沒有

補充:成員變數初始化

當乙個物件被建立時,會對其中各種型別的成員變數自動進行初始化賦值。基本資料型別初始化值為0

,引用資料型別初始化值為

null。

(5)建構函式 (構造器 

== 構造方法)

1)特點:a、方法名與類名相同 b、不用定義返回值型別 c、不需要寫return語句

2)作用:給類中的字段進行初始化,可以用來建立物件

3)記住:所有物件建立時,都需要初始化才可以使用。(new都會呼叫建構函式)

注意事項:乙個類在定義時,如果沒有定義過建構函式,那麼該類中會自動生成乙個空引數的建構函式,為了方便該類建立物件,完成初始化。如果在類中自定義了建構函式,那麼預設的建構函式就沒有了。

乙個類中,可以有多個建構函式,因為它們的函式名稱都相同,所以只能通過引數列表來區分。所以,乙個類中如果出現多個建構函式。它們的存在是以過載體現的。

4)建構函式和一般函式有什麼區別呢?

1:兩個函式定義格式不同。

2:建構函式是在物件建立時,就被呼叫,用於初始化,而且初始化動作只執行一次。一般函式,是物件建立後,需要呼叫才執行,可以被呼叫多次。

5)什麼時候使用建構函式呢?

分析事物時,發現具體事物一出現,就具備了一些特徵,那就將這些特徵定義到建構函式內。

6)構造**塊和建構函式有什麼區別?

構造**塊:是給所有的物件進行初始化,也就是說,所有的物件都會呼叫乙個**塊。只要物件一建立。就會呼叫這個**塊。建構函式:是給與之對應的物件進行初始化。它具有針對性。

7)person p = new person();

建立乙個物件都在記憶體中做了什麼事情?

1:先將硬碟上指定位置的

person.class

檔案載入進記憶體。

2:執行

main

方法時,在棧記憶體中開闢了

main

方法的空間(壓棧

-進棧),然後在

main

方法的棧區分配了乙個變數p。

new4:在該實體空間中進行屬性的空間分配,並進行了預設初始化。

5:對空間中的屬性進行顯示初始化。

6:進行實體的構造**塊初始化。

7:呼叫該實體對應的建構函式,進行建構函式初始化。() p 

,p變數就引用了該實體。

(指向了該物件)

8)setter方法和構造方法都可以用來初始化欄位的值,那麼什麼時候用構造方法什麼時候用

setter

a、當字段的值是和類的物件緊密相關不可分割的時候,用構造方法,就是說我要有這個例項,就必須有這個字段值,就用構造方法。

b、需要初始化的字段值不太多的時候可以用構造方法,如果欄位值太多,構造方法的引數列表太。。。了。

c、其他時候都可以用setter

方法。

物件導向第三章 多型

多型 多型 是具有表現多種形態的能力的特徵。實現多型的三個必備條件 1.繼承 2.要有重寫 3.父類引用指向子類物件 實現多型的兩種方式 1.使用父類作為方法形參實現多型 2.使用父類作為方法返回值實現多型 多型的好處 通過多型可以減少類中的 量,可以提高 的可擴充套件性和可維護性。繼承是多型的基礎...

第三章 物件導向程式設計

一 go語言物件導向的特點 不支援繼承 虛函式 建構函式 析構函式 隱藏的this指標 整個型別系統通過介面串聯 非侵入式介面 二 型別系統 含義 指乙個語言的型別體系結構,包含以下基本內容 基礎型別,如 byte,int,float32等 復合型別,如 陣列,結構體,指標等 可以指向任意物件的an...

第三章 物件導向(上)

1 請按照以下要求設計乙個學生類student,並進行測試。要求如下 student類中包含姓名 成績兩個屬性。分別給這兩個屬性定義兩個方法,乙個方法用於設定值,另乙個方法用於獲取值。student類中定義乙個無參的構造方法和乙個接收兩個引數的構造方法,兩個引數分別為姓名和成績屬性賦值。在測試類中建...