JAVA學習心得--繼承、介面與泛型
1、JAVA不支援多重繼承,子類只能有一個父類。類宣告中,用關鍵字extends來宣告一個類是另外一個類的子類。
2、子類和父類在同一個包中,子類自然繼承了其父類中不是private的成員變數和方法作為自己的,訪問許可權不變。不在同一個包中,子類繼承父類的protecded,public成員變數和方法,子類不能繼承父類的友好變數和方法。
3、在子類中定義的成員變數只要和父類中的成員變數同名時(不管變數的型別),子類就隱藏了繼承的成員變數。方法重寫:子類中定義一個方法,並且這個方法的名字、返回型別、引數個數和型別與從父類繼承的方法完全相同。重寫的方法既可以操作繼承的成員變數,也可以操作子類宣告定義的成員變數。重寫父類方法時,不可以降低方法的訪問許可權。
4、子類使用super呼叫父類的構造方法,必須是子類建構函式中的第一條語句。若不用,表示隱式地呼叫父類不帶引數的構造方法。在子類中使用父類被隱藏的成員變數和方法時使用 super.父類成員變數名,super.父類方法名。
5、用final宣告的類不能被繼承,不能有子類。
6、若B是A的子類或間接子類,則A a;a=new B();OR A a;B b=new B();a=b;那麼稱物件a是子類物件b的上轉型物件。上轉型物件不能操作子類宣告的成員變數和方法。但可操作子類繼承的成員變數、隱藏的成員變數、繼承的和重寫的方法。可以將物件的上轉型物件再強制轉換到一個子類物件,這時該子類物件又具備了子類的所有屬性和功能。不可以將父類建立的物件的引用賦值給子類宣告的物件。
7、上轉型物件操作子類繼承或重寫的方法時,就是統通知對應的子類物件去呼叫這些方法。如果子類重寫了父類的某個方法後,物件的上轉型物件呼叫這個方法時,一定是呼叫了這個重寫的方法。
8、用關鍵字abstract修飾的類稱為抽象類。abstract類不能用運算子new建立物件,必須產生其子類,由子類建立物件。抽象類類體中可以有abstract方法,此方法只允許宣告,不允許實現。如果一個非抽象類是一個抽象類的子類,它必須具體實現父類的抽象方法,既重寫父類的抽象方法。抽象類可以沒抽象方法,但如果一個類體中有抽象方法,那麼這個類必須用abstract修飾。
9、介面用interface宣告,和類宣告相似。介面體中包含常量的定義和方法的定義,其中只進行方法的宣告,不允許實現。一個類使用implents宣告實現一個或多個介面(多個時,用逗號隔開)。如果一個類實現某個介面,那麼必須實現該介面所有方法。在類中實現時,方法的名字,返回型別,引數個數及型別必須與介面中完全一致。介面中方法預設是public和abstract的,介面宣告可以省略,類實現時,一定要用public修飾。如果介面方法返回型別不是void,那麼類中實現時至少要有一個return。
10、可以把使用某一個介面的類建立的物件的引用賦給該介面宣告的介面變數中。那麼該介面變數就可以呼叫被類實現的介面中的方法,當介面變數呼叫被類實現的介面中的方法時,就是通知相應的物件呼叫介面的方法,這一過程稱為物件功能的介面回撥。當一個方法的引數是一個介面型別時,如果一個類實現了該介面,那麼就可以把該類的例項引用傳值給該引數,引數可以回撥類實現的方法。
11、外嵌類的成員變數在內部類中有效,內部類中的方法也可以呼叫外嵌類中的方法,外嵌類可以把內部類宣告物件作為外嵌類的成員變數。
12、用class 名稱<泛型列表>宣告一個類,成為泛型類。泛型列表中,並沒有指定是何種型別的資料,可以是任何物件或介面,但不能是基本資料型別。使用泛型類宣告物件時,必須要指定類中使用泛型的具體實際型別。