Java中類的繼承與接口

         Java中的另一個特點就是繼承,一般而言Java中是不能多繼承的,但是對於接口而言,又可以說是多繼承的。

        在Java中,一個工程一般都有很多的類,而有的時候類與類之間代碼是有重複的,這些重複的代碼有時候我們可以向上抽去出來,形成一個新的類,這個新的類就是父類,而原來的類就是子類,子類可以通過extends繼承父類,父類中有的東西,子類中也會有(除了父類中私有的變量和函數)。當然繼承的時候,子父類中難免會出現同名的變量,這個時候在子類或者主函數中實例化後引用的變量肯定是子類裏的變量,父類中的就好像是被子類中的同名變量覆蓋了一樣,這個時候如果我們想引用父類中的變量的時候我們可以用super關鍵字,它和this關鍵字基本上一樣,只是this代表的是本類,super代表的是父類而已。子父類中的函數也和變量差不多,當子類中出現和父類中一模一樣的函數時,子類對象調用該函數時,會運行子類函數的內容,這就是函數的一個特性:重寫。重寫功能一般就是用在子類中有和父類一樣的函數,但是函數主體中的內容不同,這時候我們不需要定義新的函數編寫這個功能,只需要是用覆蓋特性就可以了。

        類中還有一個特殊的函數,就是構造函數,構造函數就是和類名相同的函數。在子類進行初始化的時候,父類中的構造函數也會運行,那是因爲子類的構造函數中第一行會有一條默認的語句:super(),這就會調用父類總的構造函數,如果函數super(參數...),它就會調用與之對應的構造函數。爲什麼子類初始化會訪問父類的構造函數呢?因爲子類在繼承父類的時候,子類必須知道父類中有什麼樣地函數和變量,這樣子類才能繼承,而在查看父類中的函數和變量的時候,父類中的變量和函數就會進入內存,這時候就會對父類初始化。還有一點需要注意的是,當我們想讓子類初始化時訪問特定的父類構造函數時,我們手動書寫super語句時必須寫在子類構造函數的第一行。

        學習繼承的時候,我們肯定會接觸到關鍵字final的,final可以修飾類、函數和變量,而且被final修飾的類不可以被繼承。繼承有一個弊端,就是打破了類的封裝性,所以當我們的類或者函數不想被繼承的時候,我們可以用final進行限制。final修飾變量的時候就是我們平時常使用的常量。

        我們學習繼承的時候,肯定會接觸到abstract關鍵字,這是抽象的意思。當多個類中出現相同功能,但是功能主體不同,這時可以向上進行抽取,只抽取功能定義,而不抽取功能主體,這就是抽象方法,而抽象方法必須放在抽象類中,子類對這樣的父類進行繼承時,我們必須對其中的抽象方法進行復寫,把功能主體實現。按我學習接口的理解,接口就是一種特殊的類,抽象類中不但可以定義抽象方法,還可以定義一般方法,但是接口中的方法全部都是抽象方法,用interface定義接口,而接口與接口之間可以進行多繼承。接口中的成員都有固定的修飾符,常量:public static final  方法:public abstract名字(),類繼承接口時,不是extends而是implement,這時被稱爲實現,類中實現藉口時,我們必須把接口中的方法實現,如果不實現,那這個類還是抽象類。接口主要就是爲了實現類的功能擴展。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章