1. 程式人生 > 資訊 >5.31 紅包雙雙加場加碼:天貓 / 京東 618 預售最後一天

5.31 紅包雙雙加場加碼:天貓 / 京東 618 預售最後一天

封裝

封裝指的就是把資料與功能都整合到一起
聽起來是不是很熟悉,沒錯,我們之前所說的”整合“二字其實就是封裝的通俗說法。
除此之外,針對封裝到物件或者類中的屬性,我們還可以嚴格控制對它們的訪問,分兩步實現:隱藏與開放介面

繼承

繼承是一種建立新類的方式,在Python中,新建的類可以繼承一個或多個父類,新建的類可稱為子類或派生類,父類又可稱為基類或超類

多型

多型指的是一類事物有多種形態,比如動物有多種形態:貓、狗、豬

java 介面

介面可以理解為一種特殊的類,裡面全部是由全域性常量和公共的抽象方法所組成,介面是解決java無法使用多繼承的一種手段,但是介面在實際中更多的作用是制定標準的。

介面的特點

就像一個類一樣,一個介面也能夠也有方法和屬性,但是在介面中宣告的方法預設是抽象的(即只有方法識別符號,而沒有方法體)
  • 一個類實現這個介面必須實現這個介面中定義的所有的抽象方法
  • 介面指明瞭一個類必須做什麼和不能做什麼
  • 一個介面就是描述一種能力,比如"運動員"也可以作為一個介面,並且如何實現"運動員"介面的類必須能力實現奔跑這個動作,所以介面的作用就是告訴類,你要實現我這種介面代表的功能,你就必須實現某些方法,我才能承認你確實擁有該介面代表的某種能力。
  • 抽象方法只能存在於抽象類或者介面中,但抽象類中卻能存在非抽象方法,既有方法體的方法。介面是百分之百的抽象類

為什麼要用介面

1、介面被用來描述一種抽象
2、因為java不像c++一樣支援多繼承,所以java可以通過實現介面來彌補這個侷限
3、介面也被用來實現解耦
4、介面被用來實現抽象,而抽象類也被用來實現抽象,為什麼一定要用介面呢?介面和抽象類之間又有什麼區別呢?原因是抽象類內部可能包含非final的變數,但是在介面中存在的變數一定是final,public,static的

go 介面

在面向物件的領域裡,介面一般這樣定義:介面定義一個物件的行為,介面只指定了物件應該做什麼,至於如何實現這個行為(即實現細節),則由物件本身去確定
在Go語言中,當一個型別定義了介面中的所有方法,我們稱它實現了該介面。介面指定了一個型別應該具有的方法,並由該型別決定如何實現這些方法。

例如,WashingMachine 是一個含有 Cleaning() 和 Drying() 兩個方法的介面。任何定義了 Cleaning() 和 Drying() 的型別,都稱它實現了 WashingMachine 介面。

go 多型

Go通過介面來實現多型,在go語言中,是隱式的實現介面,一個型別如果定義了介面所宣告的全部方法,那它就實現了該介面。
一個型別如果定義了介面的所有方法,那它就隱式的實現了該介面

所有實現了介面的型別,都可以把它的值儲存在一個介面型別的變數中,在Go中,我們使用介面的這種特性類實現多型。

python 鴨子型別

https://zhuanlan.zhihu.com/p/109334326

多型性

多型性指的是可以在不用考慮物件具體型別的情況下而直接使用物件,這就需要在設計時,把物件的使用方法統一成一種:例如cat、dog、pig都是動物,但凡是動物肯定有talk方法

協議

在面向物件程式設計中,協議是非正式的介面,是一組方法,是由文件和約定定義,因此,協議不能像正式介面那樣施加強制性約束,而python的哲學就是儘量支援基本協議。

鴨子型別

是動態型別的一種風格,不管物件屬於哪個,也不管宣告的具體介面是什麼,只要物件實現了相應的方法,函式就可以在物件上執行操作。即忽略物件的真正型別,轉而關注物件有沒有實現所需的方法、簽名和語義.
python語言沒有interface關鍵字,就是說,python裡面沒有java,go一樣的介面

如果想編寫現有物件的自定義版本,可以繼承該物件,也可以建立一個外觀和行為像,但與它無任何關係的全新物件,後者通常用於儲存程式元件的鬆耦合度。

舉例

這裡有兩個類,一個是文字檔案類,一個是硬碟類,這兩個類都有兩個與檔案操作型別同名的方法,即read和write,這二者看起來都像檔案,因而就可以當檔案一樣去用,然而它們並沒有直接的關係
#二者看起來都像檔案,因而就可以當檔案一樣去用,然而它們並沒有直接的關係
class Txt: #Txt類有兩個與檔案型別同名的方法,即read和write
    def read(self):
        pass
    def write(self):
        pass

class Disk: #Disk類也有兩個與檔案型別同名的方法:read和write
    def read(self):
        pass
    def write(self):
        pass