1.代碼塊
(1)在java中,使用 { } 括起來的代碼 被稱為代碼塊
(2)分類:
A:局部代碼塊
【局部位置】
【作用:用于限定 變量的生命周期】
B:構造代碼塊
【在類中的成員位置,用{}括起來的代碼。每次調用構造方法執行前,都會先執行構造代碼塊。】
【作用:可以把多個構造方法的共同 代碼放到一起,對對象進行初始化】
C:靜態代碼塊
【在類的成員位置,用{}括起來的代碼,只不過它用static修飾了】
【作用:一般是對類進行初始化】
(3)結論:
A:執行順序 :
【靜態代碼塊 > 構造代碼塊 > 構造方法】
B:靜態代碼塊:只執行一次
C:構造代碼塊:每次調用構造方法都會執行
2.繼承
(1)把多個類中相同的成員給提取出來 定義到一個獨立的類中,然后讓多個類和該獨立類產生一個關系。
這種關系,就叫做繼承。
(2)Java中表示繼承
A:用關鍵字 extends 表示
B:格式
(3)繼承的好處:
A:提高了代碼的復用性
B:提高了代碼的維護性
C:讓類與類產生了一個關系,是多態的前提
(4)繼承的弊端:
A:讓 類的耦合性增強。這個類的改變,會影響其他和該類相關的類
【原則:低耦合,高內聚 】
【耦合:類與類的關系】
【內聚:自己完成某件事情的能力】
B:打破了封閉性
(5)Java中繼承的特點:
A:Java中類只支持單繼承
B:Java中可以多層繼承
(6)繼承的注意事項
A:子類不能繼承父類的私有成員
B:子類不能繼承父類的構造方法,但可以通過 super 去訪問
C:不要為了部分功能而去繼承
(7)什么時候使用繼承
A:繼承體現 的是:is a 的關系(蘋果 is a 水果)
B:采用假設法
(8)Java繼承中的成員關系
A:成員變量
【子類的成員變量名稱 和 父類的成員變量名稱 不一樣】
【子類的成員變量名稱 和 父類的成員變量名稱 一樣】
【子類中 調用父類中 指定成員變量 】
B:構造方法
【子類的構造方法默認會去訪問父類的無參構造方法】
【子類中如果沒有無參構造方法】
方法一:在父類中加一個帶參數的構造方法
方法二:通過super關鍵字去顯示的調用父類的帶參數構造方法
方式三:子類通過this去調用本類的其他構造方法
【子類中一定要有一個去訪問父類的構造方法,否則父類數據就沒有初始化】
【注】this(…) 和 super(…) 必須放在第一條語句,否則會對父類進行多次初始化
C:成員方法
【子類的成員方法名稱 和 父類的成員方法名稱 不一樣】
【子類的成員方法名稱 和 父類的成員方法名稱 一樣】
(9)this與super
A:區別
【this代表本類對應的引用】
【super代表父類存儲空間的標識(可以理解為父類引用,可以操作父類的成員)】
B:使用
【調用成員變量】
this.成員變量--調用本類的成員變量
super.成員變量--調用父類的成員變量
【調用構造方法】
this(…)--調用本類的構造方法
super(…)--調用父類的構造方法
【調用成員方法】
this.成員方法--調用本類的成員方法
super.成員方法--調用父類的成員方法
3.方法的重寫(Override)
(1)定義:
子類中出現了和父類中方法聲明一模一樣的方法
(2)應用:
當子類需要父類的功能,而功能主體子類有自己特有的內容時,可以重寫父類中的方法。這樣,既沿襲了父類的功能,又定義了子類特有的內容
(3)使用方式:
(4)注意事項
A:父類中私有方法不能被重寫
【因為父類 私有方法,子類根本就無法繼承】
B:子類重寫父類方法時,訪問權限不能更低
【子類權限 最好 和父類一致】
C:父類靜態方法,子類也必須通過靜態方法進行重寫
【這個算不上重寫,但是現象確實如此】
新聞熱點
疑難解答