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類中定義乙個無參的構造方法和乙個接收兩個引數的構造方法,兩個引數分別為姓名和成績屬性賦值。在測試類中建...