------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android教育訓練</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java教育訓練</a>、期待與您交流! ----------
抽象類和接口,以及内部類的使用。
抽象類
抽象類的概述
抽象類特點:
a:抽象類和抽象方法必須用abstract關鍵字修飾
抽象類格式: abstract class 類名 {}
抽象方法格式: public abstract 傳回值類型 方法名();
b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
c:抽象類中可以有構造方法,抽象類不能進行執行個體化,那麼要構造方法有什麼作用呢?
用于子類通路父類資料時的初始化
d:抽象類不能執行個體化那麼,抽象類如何執行個體化呢?
按照多态的方式,由具體的子類執行個體化。其實這也是多态的一種,抽象類多态。
e:抽象類的子類
要麼是抽象類
要麼重寫抽象類中的所有抽象方法
抽象類的成員特點
a:成員變量:既可以是變量,也可以是常量。
b:構造方法:有。用于子類通路父類資料的初始化。
c:成員方法:既可以是抽象的,也可以是非抽象的。
接口
接口的概述:
接口特點:
a:接口用關鍵字interface表示格式:interface 接口名 {}
b:類實作接口用implements表示格式:class 類名 implements 接口名 {}
c:接口不能執行個體化
那麼,接口如何執行個體化呢?
按照多态的方式來執行個體化。
d:接口的子類
a:可以是抽象類。但是意義不大。
b:可以是具體類。要重寫接口中的所有抽象方法。(推薦方案)
接口的成員特點
成員變量;隻能是常量,并且是靜态的。
預設修飾符:public static final
建議:自己手動給出。
構造方法:接口沒有構造方法。
成員方法:隻能是抽象方法。
預設修飾符:public abstract
建議:自己手動給出。
類與類,類與接口,接口與接口的關系:
a:類與類:
繼承關系,隻能單繼承,可以多層繼承。
b:類與接口:
實作關系,可以單實作,也可以多實作。
并且還可以在繼承一個類的同時實作多個接口。
c:接口與接口:
繼承關系,可以單繼承,也可以多繼承。
抽象類與接口的差別
A:成員差別
抽象類:
成員變量:可以變量,也可以常量
構造方法:有
成員方法:可以抽象,也可以非抽象
接口:
成員變量:隻可以常量
成員方法:隻可以抽象
B:關系差別
類與類
繼承,單繼承
類與接口
實作,單實作,多實作
接口與接口
繼承,單繼承,多繼承
C:設計理念差別
抽象類 被繼承展現的是:”is a”的關系。抽象類中定義的是該繼承體系的共性功能。
接口 被實作展現的是:”like a”的關系。接口中定義的是該繼承體系的擴充功能。
内部類:
内部類的分類:
成員位置:在成員位置定義的類,被稱為成員内部類。
局部位置:在局部位置定義的類,被稱為局部内部類。
内部類通路特點
a:内部類可以直接通路外部類的成員,包括私有。
b:外部類要通路内部類的成員,必須建立對象。
class Outer {
class Innter {
}
}
格式: 外部類名.内部類名 對象名 = 外部類對象.内部類對象;
Outer.Inner oi = new Outer().new Inner() ;
private 為了保證資料的安全性
static 為了友善通路資料
注意事項: a:靜态内部類通路的外部類資料必須用靜态修飾。
b: 成員方法可以是靜态的也可以是非靜态的
格式:
外部類名.内部類名 對象名 = new 外部類名.内部類名();
匿名内部類
其實是内部類的一種簡化的寫法 , 屬于局部内部類的範圍
前提:
需要有一個類或者接口,這個類可以是抽象類也可以是非抽象類
格式:
new 類名/接口名() {
複寫方法 ;
} ;
本質:
是一個繼承自某一個類或者實作了某一個接口的子類對象 ;
class Animal {}
// 本質: 就是繼承自Animal的子類對象
new Animal() {
} ;