物件導向3

2021-10-01 23:51:58 字數 4734 閱讀 3325

繼承中成員方法的訪問

子類繼承父類,如果子類的成員方法名和父類的成員方法名不一致的情況:分別呼叫即可!

如果子類的成員方法名稱和父類的成員方法名稱一致的情況:

1)先在子類找,如果存在方法名,就使用

2)如果子類中不存在,就在父類中找,存在就使用

3)父類中都沒有,就編譯報錯了!

方法重寫

方法重寫:

子類出現了和父類一模一樣的方法宣告

修飾符 返回值 方法名都一樣(一模一樣)

注意事項:

子類重寫父類的方法的時候,訪問許可權不能更低!,最好帶上許可權修飾符 跟父類一樣都是public

要麼子類重寫父類的方法的時候,訪問許可權比父類大即可!(或者和父類一模一樣)

//定義乙個手機類

class

phone

}//新的手機類 繼承自 phone類

class

newphone

extends

phone

}//測試類

class

extendsdemo2

}

繼承的使用
//動物類

class

animal

private string name;

private

int age;

private string color;

public

void

setname

(string name)

public string getname()

public

void

setage

(int age)

public

intgetage()

public

void

setcolor

(string color)

public string getcolor()

public

void

eat(

)public

void

sleep()

}//繼承動物的貓類

class

catextends

animal

public

void

eat(

)public

void

sleep()

public

void

game()

}//繼承動物的狗類

class

dogextends

animal

public

void

eat(

)public

void

sleep()

public

void

game()

}class

ce}

兩個面試題

1)overload和override的區別?

方法過載和方法重寫

方法過載:定義方法的時候,如果方法名一樣,引數列表不同,與返回值無關

引數列表不同:

1)引數個數不同

2)引數型別不同

構造方法可以方法過載

方法重寫(重點):繼承關係中,子類出現了和父類一模一樣的方法宣告,將父類覆蓋(複寫),建立子類物件,呼叫該方法,執行子類的功能!

底層原碼很多技術都使用到了方法重寫!

2)this和super的區別?

this:當前當前類物件的位址值引用

super:代表父類的空間標識(父類物件的位址值引用)

呼叫成員變數

this.成員變數: 訪問本類成員位置的變數

super.成員變數: 訪問父類的成員位置變數

呼叫成員方法

this.成員方法名();

supser.成員方法名() ;

呼叫構造方法

this():訪問本類無參構造方法

this(…): 訪問本類有參構造

super():訪問父類的無參構造

super(…):訪問父類的有參構造

final:不可改變。可以用於修飾類、方法和變數。

可以修飾類,該類不能被繼承

可以修飾成員變數,此時變數是乙個常量,不能被賦值

可以修飾成員方法,該方法不能被重寫

子類重寫父類的靜態的方法的時候,子類的該方法必須靜態.靜態方法算不上方法重寫,但是出現的現象和方法重寫的現象一樣.(靜態在類載入前就存在先載入了)

多型:乙個事物在不同時刻的不同狀態

舉例:animal a = new cat() ;//貓是動物

cat c = new cat() ; //貓是貓

多型的前提條件:

1)必須有繼承關係 (產生乙個中extends 關係)

2)需要有方法重寫

子類繼承父類的時候,需要使用子類的功能,需要將父類的功能覆蓋掉! 舉例:貓狗案例

animal, eat()和sleep(),每個動物的吃和睡的行為不同!

3)必須有父類引用指向子類物件 (向上轉型)

fu f = new zi() ; 在記憶體中使用子類例項化(建立物件),但是子類繼承父類,通過構造方法 讓父類初始化

多型的成員訪問特點:

fu f = new zi() ;
1)成員變數(非靜態變數)

編譯看左,執行看左邊 (看父類)

2)構造方法

fu f = new zi() ; 記憶體建立的是子類物件,但是存在繼承關係,執行構造方法先讓父類初始化完畢,然後在初始化子類

3)成員方法(非靜態) (方法重寫,說的非靜態的方法!)

編譯看左,執行看右 (因為存在方法重寫,執行看的右邊)

4)靜態的成員方法:

編譯看左,執行看左(靜態方法算不上方法重寫,跟類先關,優先父類進行資料初始化,function方法先進記憶體)

父類引用.靜態方法名()–呼叫父類的方法

多型的好處:

1)提高**的維護性(繼承來保證)

2)提高**的擴充套件性(由多型保證)

多型的弊端:

父類引用指向子類物件(向上轉型),無法訪問子類的特有功能!

需要訪問子類特有功能,怎麼辦?

1)直接在測試的時候,子類去建立自己的物件

son s = new son()

可以訪問,但是從記憶體角度考慮,重新在堆記憶體中開闢空間,耗費空間的記憶體!

2)如果能夠類似於這種方式:父類引用指向子類物件,訪問的是父類,如果能夠將父類的引用轉換為子類引用

是可以的,

將父類的引用強制轉換為子類的引用 :向下轉型

zi zi = (zi)f;

//父類

class

father

}//子類

class

sonextends

father

public

void

playgame()

}//測試類

class

duotaidemo4

}

多型的應用

假如我們在開發乙個系統時需要對職員類進行設計,職員包含3個屬性:姓名、工號以及工資。以及工作的功能

員工也是職員,除了含有職員的屬性外,自己的工作為敲**

經理也是員工,除了含有職員的屬性外,另為還有乙個獎金屬性。自己的工作為定專案,特有功能為獎金

請使用繼承的思想設計出員工類和經理類。要求類中提供必要的方法進行屬性訪問。

//父類 職員類

class

zhiyuan

private string name;

//私有父類成員屬性

private

int id;

private

int gongzi;

public

void

setname

(string name)

public

void

setid

(int id)

public

void

setgongzi

(int gongzi)

public string getname()

public

intgetid()

public

intgetgongzi()

public

void

gongzuo()

}//子類 員工類

class

yuangong

extends

zhiyuan

public

void

gongzuo()

}//子類 經理類

class

jingli

extends

zhiyuan

private

int jiangjin;

//子類特有屬性私有化

public

void

setjiangjin

(int jiangjin)

public

intgetjiangjin()

public

void

gongzuo()

public

void

jiangjin()

}class

yuance

}

物件導向3

前邊八篇部落格寫了從面向過程的方法來開發一款軟體的各種方法,和過程。包括了計畫,需求分析,設計,程式功能的實現,測試,維護還有介面設計的多項。但是,隨著技術的發展,隨著it業的發展,物件導向的技術,已經發展的越來越廣泛。這篇部落格,我就給大家概要介紹一下面向技術相關技術!首先看一下要總結知識的幾大項...

物件導向3

1 json的全稱就是個 object 物件 2 物件導向的封裝函式叫做工廠方式 方便建立多個物件導向 3 物件的引用 基本型別的引用 單純只是值的複製 物件型別的引用 位址的傳遞引用 只要在程式中賦值,必然要開闢新的位址。比較 基本型別只要值相同true 物件型別 值和引用都相同 var arr1...

物件導向3

抽象類 抽象類是對一類事物特徵行為的抽象,可以包含抽象方法。在python3中可以使用abc模組,該模組中有乙個元類abcmeta和修飾器 abstractmethod。抽象類不能被直接例項化 多重繼承 python支援多重繼承,即1個類可以繼承多個父類。語法為 class name parent ...