類與物件(三)繼承與多型

2021-08-21 22:13:07 字數 2059 閱讀 1454

什麼是繼承:繼承就是可以直接使用前輩的屬性和方法。

如下面的示例:

定義人類:

public class person 

public void print()

}

定義員工類:

//員工類

public class employee

public void print()

}

測試類:

public class test 

}

結果:

這樣做的問題存在:1.重複勞動:人有姓名,性別等屬性,員工中又重複定義了,將來可能在學生,教師等類中還要重複定義。2.資訊不一致:比如人的性別用0-1表示,而員工類可能用「男/女」來表示,導致使用上的混亂。那麼能否在員工類中使用已有人類的姓名,性別等,一一繼承。

我們把上面的員工類改寫以下,一一繼承自person類

//員工類

public class employee extends person

//繼承父類的輸出方法

public void print()

}

使用繼承很好的解決了上面提出的兩個問題

extends 是「拓展,延伸」的含義,public class employee extends person就是宣告乙個叫做employee的類,它是在person類的基礎上進行拓展,專業術語稱之為繼承自person類

super是"超「的含義,person類相對於employee類就是超類,通俗一點就是父類。

子類繼承了父類的屬性和方法,當然也可以在此基礎上進行拓展-----加和改。在這個案例中加了」薪水「屬性,改寫了」列印「方法。這裡有乙個專業術語------重寫(override)。

繼承不僅僅解決了剛才的兩個問題,還是得類有層次結構,邏輯上也更加合理。比如」員工「也是」人「。

多型就是將同乙個訊息傳送給不同物件是,他們所做的響應可能是不同的。比如說動物都有」叫「的方法,但是狗是」汪汪汪「的叫,而貓是」喵喵喵「的叫,當他們接收到被打的訊息時,所做的響應是不同的。

案例:打動物

定義動物類,實現」叫「的方法

//動物類

public class animal

}

定義狗類,繼承動物類,重寫"叫」的方法

public class dog extends animal

}

定義貓類,繼承動物類,重寫「叫」的方法

public class cat extends animal

}

測試類

public class test 

private static void hit(dog d)

private static void hit(cat c)

private static void hit(animal a)

}

在測試程式中定義了乙個「打」的方法,這種做法是比較笨拙的,有幾種動物就需要定義幾種方法,這個可能沒完沒了,有沒有一勞永逸的方法?

不要傳遞dog或者cat等物件,而是傳遞乙個animal類物件就可以解決上面的問題。修改上面測試程式如下:

public class test 

private static void hit(animal a)

}

這裡涉及了兩個點:

hit方法型是animal型別,而是實參是dog或者cat,所以型別不一致,為什麼還可以呢?

所謂賦值相容性規則,值得是凡是需要用到父類引用的父類引用的地方,都可以是用它的子類引用去代替。比如某人請求派車去接他,結果對方派了個三輪車去接了,雖然他可能不滿意,但也沒辦法,因為對方是按照他的要求去做的。

形參一定是父類的引用,而是參可以是他的任何乙個子類的引用。

類的繼承與多型

繼承 概念 子類可以繼承父類的一切 方法重寫 在子類裡面對父類的方法進行重寫 特點 單繼承 乙個子類只能有乙個父類,乙個父類可以派生出多個子類 override 重寫 overload 過載,編譯多型 class ren class china extends ren class america e...

類與物件 繼承

繼承是物件導向的基本特徵之一,通過繼承機制,可以在已有的類的基礎上建立新類,新類可以繼承已有類的屬性和行為,也可以修改已有類的屬性和行為,或者增加新的屬性和行為以滿足自身特殊的需要。ifndef a h ifdef a h include using namespace std class a a ...

python類的繼承與多型

定義乙個類 class animal object defrun self print animal is runnning 繼承此類 class dog animal pass例項化 dog.run animal is runnning 以上 母類擁有乙個方法 此方法會繼承到子類,故子類也可以執行...