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支援多實現。