2 36 覆蓋 子類想要一點不一樣

2021-10-03 18:45:09 字數 3084 閱讀 7417

覆蓋:子類想要一點不一樣

覆蓋才是繼承的精髓和終極奧義

看例程:學習覆蓋

從覆蓋的角度理解為什麼使用方法讀寫屬性,優於直接訪問屬性

問題:為了避免**重複,在子類裡使用父類的 buy 和 describe 方法。如何在子類裡,調

用父類的方法?

public

class

phone

extends

merchandisev2

// >> todo 通過使用和父類方法簽名一樣,而且返回值也必須一樣的方法,可以讓子類覆蓋(override)掉父類的方法

// >> todo ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓下面才是繼承的終極奧義↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

// >> todo 也就是說,子類並不是只能把父類的方法拿過來,而且可以通過覆蓋來替換其中不適合子類的方法

// >> todo ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑上面才是繼承的終極奧義↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

// >> todo 題外話:屬性是聯動的,可能是有特殊意義的。

// todo 所以直接給屬性賦值是危險的,因為沒有辦法檢查新的值是否有意義,也沒法對這個修改做聯動的修改

public

double

buy(

int count)if(

this

.count < count)

this

.count -= count;

double cost = count * soldprice;

system.out.

println

("購買成功,花費為"

+ cost)

;return cost;

}// >> todo 返回值必須一樣,不是型別相容,而是必須一摸一樣。

// >> todo 如果簽名一樣,但是返回值不一樣,會是錯誤

// public int buy(int count)

// if (this.count < count)

// return this.count -= count;

// }

// >> todo 返回值必須一樣,不是型別相容,而是必須一摸一樣

// public boolean buy(int count)

// >> todo 覆蓋可以覆蓋掉父類的方法。同乙個方法,不同的行為。

// >> todo 這,就是多型!

// >> todo 方法可以覆蓋,屬性訪問不可以,所以這也是使用方法的乙個原因。

// todo 即使在父類裡,只是乙個簡單的getname,但是這樣做,子類就可以覆蓋掉父類的方法

// todo 方法不止眼前的**,還有子類的覆蓋。用方法,才能覆蓋,才能多型。

public string getname()

// todo 根據我們對覆蓋的理解,phone類裡的describephone方法應該叫做describe

// todo 同樣的,我們想喲呼叫父類裡的describe方法,試試看?

public

void

describephone()

public

boolean

meetcondition()

public

double

getscreensize()

public

void

setscreensize

(double screensize)

public

double

getcpuhz()

public

void

setcpuhz

(double cpuhz)

public

intgetmemoryg()

public

void

setmemoryg

(int memoryg)

public

intgetstorageg()

public

void

setstorageg

(int storageg)

public string getbrand()

public

void

setbrand

(string brand)

public string getos()

public

void

setos

(string os)

}

todo 通過使用和父類方法簽名一樣,而且返回值也必須一樣的方法,可以讓子類覆蓋(override)掉父類的方法

// >> todo ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓下面才是繼承的終極奧義↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

// >> todo 也就是說,子類並不是只能把父類的方法拿過來,而且可以通過覆蓋來替換其中不適合子類的方法

// >> todo ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑上面才是繼承的終極奧義↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

// >> todo 題外話:屬性是聯動的,可能是有特殊意義的。

// todo 所以直接給屬性賦值是危險的,因為沒有辦法檢查新的值是否有意義,也沒法對這個修改做聯動的修改

返回值必須一樣,不是型別相容,而是必須一摸一樣。

如果簽名一樣,但是返回值不一樣,會是錯誤

覆蓋可以覆蓋掉父類的方法。同乙個方法,不同的行為。

這,就是多型!

方法可以覆蓋,屬性訪問不可以,所以這也是使用方法的乙個原因。

即使在父類裡,只是乙個簡單的getname,但是這樣做,子類就可以覆蓋掉父類的方法

方法不止眼前的**,還有子類的覆蓋。用方法,才能覆蓋,才能多型。

根據我們對覆蓋的理解,phone類裡的describephone方法應該叫做describe

同樣的,我們想喲呼叫父類裡的describe方法,試試看?

不一樣又不一樣的 木板接水

空地上豎立著n個從左到右排列的木板,它們可以把水擋住,但溢位最邊上木板的水將會流到空地上。已知木板間距都是單位1,現給定每個木板的高度,請求出總共能接住的水量?說明一點,這裡只考慮間距 寬度 和高度,不考慮第三個維度,因此水量是平方單位。木板高度分別是2,1,3,那麼我們可以接住2 2 4平方單位的...

我們不一樣

前輩們因自身實際的種種因素的影響而產生的認知,並不一定適用於我們自身。你可能從來不會去想乙個問題 你的觀點,來自 其實,它們絕大部分來自網路,它們或多或少地蠶食了你的判斷力。未來的路要怎麼走,沒有對與錯。有的,只是每乙個選擇所需要承擔的責任。我不想面臨,後之視今亦猶今之視昔的悲哀。我希望,未來回首,...

我們不一樣

這麼多年的兄弟 有誰比我更了解你 太多太多不容易 磨平了歲月和脾氣 時間轉眼就過去 這身後不散的筵席 只因為我們還在 心留在原地 張開手 需要多大的勇氣 這片天 你我一起撐起 更努力 只為了我們想要的明天 好好的 這份情好好珍惜 我們不一樣 每個人都有不同的境遇 我們在這裡 在這裡等你 我們不一樣 ...