1. 程式人生 > >介面與多型

介面與多型

一、介面 1.格式 interface 介面名{ void show();//介面當中方法是沒有實現. } 接口裡全是抽象方法(方法裡省略了關鍵字public和abstract) 介面沒有構造方法(因為成員預設修飾是public)而抽象類裡有 介面與介面之間是多繼承的 2.介面特點: 1.使用interface關鍵字來描述,接口裡面的方法沒有具體實現,類與介面之間通過implements關鍵字來實現 2.介面中的方法必須使用public來修飾(可省略),抽象方法可以使用預設許可權. 3.介面不能被例項化,因為介面中沒有具體實現的方法. 4.Animal.show(); 不能使用static關鍵字描述 5.不能使用final關鍵字修飾,因為介面的方法都需要實現。 3.介面中的成員
1.成員屬性(常量(預設使用final修飾)):介面中可以有成員變數,而且實現類可以繼承. 預設有public final 修飾,寫程式時候建議都加上. 預設還有 static修飾成員變數. 說明介面中的成員常量(因為使用final進行修飾了)都是靜態的. 介面中的常量用介面名來呼叫 2.成員方法:預設是public許可權,預設的abstract. 預設都是公共的抽象方法. 為什麼是public?我們申明的抽象方法是要具體被實現的,所以許可權只能是最大的. 3.介面沒有建構函式,因為介面中沒有成員變數,只有成員靜態常量,和成員公共的抽象方法. 4.介面的其他細節 1.介面可以多實現 class C implements A,B
就是一個類可以同時實現多個介面. 2.繼承 介面可以多繼承介面 interface Inter3 extends Inter1,Inter2 注意:類與類只能單繼承! 5.final:修飾的基本資料型別,其中的成員變數值不能被改變(因為這時候已經成為常量了) 修飾的引用型別 地址不能改變,但是地址所指向的成員可以改變 5. 類與類之間 單繼承多重繼承 類與介面之間 多實現 介面與介面之間 多繼承 6.抽象類和介面的區別: 1、抽象類只能單繼承,介面可以多實現 2、抽象類中可以有變數和常量可以是public static final 介面中只有靜態的常量public static final 抽象類中可以有抽象方法,也可以有具體方法, 介面只能有公用的抽象方法 抽象類有建構函式,多個引數的建構函式, 介面沒有建構函式 二、
多型 1.概述:某一類事物在執行時的具體體現。(官方定義) 2.多型實現的三個條件:多型是基於繼承的,重寫,父類引用指向子類物件 介面中用的最多;普通類中基本不用 3.多型的好處:增加程式碼重用,提高效率 4.多型成員基本特性 1.成員變數:多型中的不能訪問具體實現類的特有屬性(帆式理解:就是隻能呼叫接口裡自己有的東西,專屬別人的調不動) 2.成員方法(只能呼叫接口裡自己有的東西,專屬別人的調不動) 多型中不能訪問具體實現類中的特有方法 3.構造方法:建立子類物件的時候,訪問父類的構造方法,對父類資料進行初始化 4.靜態方法:編譯看左邊,執行看左邊 弊端:多型中不能去訪問具體實現類的特有的成員 static (如果父類有的話,找的是父類中的)隱藏一方面針對靜態方法一方面針對成員變數 5.多型的轉型: 向上轉型就是多型 向下轉型就是使用的是強制型別轉換,目的:為了解決多型的弊端 向下:父類的引用賦給子類引用(需要強制轉換) Zi extends Fu class Fu 向上轉型(多型):Fu z1 = new Zi(); 向下轉型 :Zi z2 = (Zi) z1; 所以多型機制遵循的原則概括為:當父類物件引用變數 引用 子類物件時,被引用物件的型別 而不是引用變數的型別 決定了呼叫誰的成員方法,但是這個被呼叫的方法必須是在父類中定義過的,也就是說被子類覆蓋的方法,但是它仍然要根據繼承鏈中方法呼叫的優先順序來確認方法,該優先順序為:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。 6.引用的多型 父類的引用指向本類物件 7.方法的多型 建立本類物件時,呼叫的方法為本類的方法 建立子類物件時,呼叫的方法為子類重寫的方法或繼承的方法 8.引用型別轉換 a 向上型別轉換(隱式/自動型別轉換) 小型別到大型別 b 向下型別轉換(強制型別轉換) 大型別到小型別 instanseof 運算子是用來在執行時指出物件是否是特定類的一個例項。instanceof通過返回一個布林值來指出,這個物件是否是這個特定類或者是它的子類的一個例項。 用法: result = object instanceos class 說明:如果 object 是 class 的一個例項,則 instanceof 運算子返回 true。如果 object 不是指定類的一個例項,或者 object 是 null,則返回 false。