1. 程式人生 > >JAVA面向物件之繼承

JAVA面向物件之繼承

繼承:

講學生和工人的共性描述提取出來,單獨進行描述。只要讓學生和工人與單獨描述的這個類有關係,就可以了。

1、提高了程式碼的複用性。

2、讓類與類之間產生了關係。有了這個關係,才有了多型的特性。

3、注意:千萬不要為了獲取其他類的功能,簡化程式碼而繼承。必須是類與類之間有所屬的關係才可以繼承。所屬關係isa

4、Java語言中,Java只支援單繼承,不支援多繼承。因為多繼承容易帶來安全隱患:當多個父類中定義了相同的功能,當功能內容不同時,子類物件不確定要執行哪一個。

但是java保留這種機制,並用另一種體現形式來完成表示(多實現)

5、java支援多層繼承。也就是一個繼承體系

小編是一個有著5年工作經驗的java程式設計師,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裡有很多學習java的小夥伴,我創立了一個2000人學習扣群,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!

如何使用一個繼承體系中的功能呢?

想要使用體系,先查閱體系父類的描述,,因為父類中定義的是該體系中共性功能,通過了解共性功能,就可以知道該體系的基本功能。

那麼這個體系已經可以基本使用了。

那麼在具體呼叫時,要建立最子類的物件,為什麼呢?

因為有可能父類不能建立物件

建立子類物件可以使用更多的功能,包括基本的也包括特有的

簡單一句話:查閱父類功能,建立子類物件使用功能。

6、子父類出現後,類成員的特點:

類中成員:

變數。

如果子類中出現非私有的同名成員變數時,子類要訪問本類中的變數,用this;訪問父類中的同名變數用super。

super的使用和this的使用幾乎一致。

this代表的是本類物件的引用;super代表的是父類物件的引用。

函式

當子類出現和父類一模一樣的函式時,當子類物件呼叫

該函式,會執行子類函式的內容。如同父類的函式被覆蓋

一樣。

這種情況是函式的另一個特性:重寫(覆蓋)】

當子類繼承父類,沿襲了父類的功能,到子類中,但

是子類雖具備該功能,但是功能的內容卻和父類的不一致

這時,沒有必要定義新功能,而是使用覆蓋特性,保留父

類的功能定義,並重寫功能的內容。

覆蓋(重寫)注意事項:

子類覆蓋父類,必須保證子類許可權大於等於父類許可權,

才可以覆蓋,否則編譯失敗。

靜態只能覆蓋靜態。

過載:只看同名函式的引數列表。

重寫:子父類方法要一模一樣。

建構函式

在對子類物件進行初始化時,父類的建構函式也會執行,

那是因為子類的建構函式預設第一行有一條隱式的語句

super()。

super():會訪問父類中的空引數建構函式。而且子類中所有

的建構函式預設第一行都是super()。

為什麼子類一定要訪問父類中的建構函式?

因為父類中的資料子類可以直接獲取。所以子類物件在建立

時需要先檢視父類是如何對這些資料進行初始化的,所以子類

在物件初始化時要先訪問一下父類中的建構函式。

如果要訪問父類中指定的建構函式,可以通過手動定義

Super語句的方式來指定。

注意:super語句一定定義在子類建構函式的第一行。

子類的例項化過程:

結論:子類的所有建構函式,預設都會訪問父類中的空參

數建構函式;因為子類中每一個建構函式內的第一行都有一

個隱式的super();

當父類中沒有空引數的建構函式時,子類必須手動通過super

語句的形式來指定要訪問父類中的建構函式。

當然:子類的建構函式第一行也可以手動指定this語句來訪

問本類建構函式;子類中至少有一個建構函式會訪問父類中的

建構函式。

final

作為一個修飾符

1、可以修飾類、函式、變數。

2、被final修飾的類不可以被繼承。是為了避免被繼承,被子類複寫的功能。

3、被final修飾的方法不可以被重寫。

4、被final修飾的變數是一個常量,只能賦值一次,既可以修飾成員變數,也可以修飾區域性變數。

當在描述事物時,一些資料的出現值是固定的,那麼這是為了增強閱讀性,都給這些值起個名字,方便於閱讀。而這個值不需要改變,所以加上final修飾。作為常量:常量的書寫規範所有字母都大寫,如果由多個單片語成,單詞間通過_連線。

5、內部類定義在類中的區域性位置上時,只能訪問該區域性被final修飾的區域性變數。

抽象

1、抽象類的特點:

抽象方法一定在抽象類中

抽象方法和抽象類都必須被abstract關鍵字修飾

抽象類不可以用new建立物件,因為呼叫抽象方法沒意義

抽象類中的抽象方法要被使用,必須由子類複寫起所有的抽象方法後,建立子類物件呼叫;如果子類只覆蓋了部分的抽象方法,那麼該子類還是一個抽象類。

抽象類中可以有抽象方法也可以有非抽象方法

抽象類和一般類沒有太大的不同:該如何描述事物,就如何描述事物,只不過,該事物出現了一些看不懂得東西。這些不確定的部分,也是該事物的功能,需要明確出現。但是無法定義主體

抽象類比一般類多了個抽象函式,就是在類中可以定義抽象方法;抽象類不可以例項化。

特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓改類建立物件。

模板方法:

在定義功能時,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分,那麼這時就將不確定的部分暴露出去。有該類的子類去實現。

介面

初期理解:可以認為是一個特殊的抽象類,當抽象類中的方法都是抽象的,那麼該類可以通過介面的形式來表示(interface)

介面定義時,格式特點:

1、介面中常見定義:常量,抽象方法。

2、介面中的成員都有固定修飾符。

常量:publicstaticfinal

方法:publicabstract

記住:介面中的成員都是public的。

3、介面是不可以建立物件的,因為有抽象方法。需要被子類實現,子類對介面中的抽象方法全部覆蓋後,子類才可以例項化。否則子類是一個抽象類。

4、介面可以被類多實現,也是對多繼承不支援的轉換形式,Java支援多實現。