?? java(day07).txt
字號:
Java第七天 2007年4月29日
一、復習
static
屬性 類變量 全類共有 類加載時初始化,類名訪問
方法 靜態(tài)方法 類名調(diào)用,靜態(tài)方法中不能訪問類的非靜態(tài)成員,可以覆蓋,只能被靜態(tài)方法覆蓋,沒有多態(tài)
初始代碼塊 類加載時運行
類加載:
一個類編譯之后會形成.class文件,儲存了類的全部信息。
當JVM第一次使用一個類的時候,會根據(jù)ClassPath找到對應的.class文件,用輸入流把文件中的信息讀入JVM并保存起來,這樣,JVM就“認識”了這個類
類加載時機:第一次用這個類的時候
1. 第一次創(chuàng)建類的對象,會加載
2. 訪問類的靜態(tài)成員,會加載
3. 聲明類的引用,不會加載
4. 加載子類,必然先加載父類
5. 如果調(diào)用的是子類從父類中繼承下來的靜態(tài)方法,只會加載父類
6. 如果訪問的是類的靜態(tài)常量,如果在編譯的時候能夠確定這個常量的值,則運行時不會加載,
否則,編譯時無法確定常量值,那么運行時就會加載
設(shè)計模式:單例模式
用途:一個類只能有一個對象
實現(xiàn):會有一個靜態(tài)的屬性,就是該類的一個對象。提供一個靜態(tài)方法,來獲得這個唯一的靜態(tài)屬性(單例),同時構(gòu)造方法私有
final
變量:常量,一旦賦值,不能改變,為屬性常量賦值的時機:對于實例常量,初始化或者構(gòu)造方法中可以賦值;
對于類常量(static final),初始化或者靜態(tài)初始代碼塊中可以賦值
方法:不能被覆蓋
類 :不能被繼承 所有方法默認都是final的
abstract
方法 :只有定義,沒有實現(xiàn)
類 :不能構(gòu)造對象,但可以用來聲明一個引用(作為編譯時類型)
如果一個類有抽象方法,這個類必須是抽象類,如果一個類是抽象類,不一定有抽象方法
子類繼承一個抽象類,就必須覆蓋(實現(xiàn))父類(抽象類)中的所有抽象方法,否則,子類就也得是抽象類
抽象類有構(gòu)造方法,給子類繼承
通過abstract,我們可以把一個方法的定義放在父類,留給子類實現(xiàn)。
二、接口
接口是一種程序結(jié)構(gòu),是特殊的抽象類。
接口中的方法必須都是公開的抽象方法(public abstract),接口中的屬性都是公開靜態(tài)常量(public static final)。
接口中沒有構(gòu)造方法
abstract class ClassA{
public static final int A = 10;
public static final double B = 3.14;
public abstract void m1();
public abstract void m2();
}
interface IA{
int A = 10;
double B = 3.14;
void m1();
void m2();
} //與上面的抽象類邏輯上等價,編譯之后,也會生成一個IA.class文件
所以一個源文件中可以寫多個接口,但只能有一個公開接口,并且要與源文件的名字一致
接口可以繼承,但是只能由接口繼承。
在用類去繼承時要換用 implements 關(guān)鍵字,這時類和接口也不叫做繼承關(guān)系,而是實現(xiàn)關(guān)系,但其實質(zhì)也是繼承。
一個類可以繼承也只能繼承另外一個類,但是可以實現(xiàn)多個接口,其語法是在implements后面寫接口名,多個接口以“,”分隔。
接口之間是可以多繼承的,其語法和類的繼承語法是相同的。
在接口多繼承時,在extends后寫接口名如果要繼承多個接口,接口名以“,”分隔,接口的繼承關(guān)系只是把其父接口中的抽象方法繼承到子接口中。
要實現(xiàn)接口就必須實現(xiàn)接口中的所有方法。
一個類可以在繼承一個類的同時,還可以實現(xiàn)一個或多個接口。采用接口就繞開了單繼承限制。
class Impl extends ClassE implements IA,IB{……}
接口類型也可以做為編譯時類型使用,但其實際的運行時類型必須是完全實現(xiàn)接口的類的對象實例,這樣就使多態(tài)變得很靈活了
接口類型的引用指向接口某一個實現(xiàn)類的對象
接口的意義:
1,接口可以實現(xiàn)多繼承。
2,用接口可以實現(xiàn)混合類型(主類型,副類型),java中可以通過接口分出主次類型。主類型使用繼承,副類型,使用接口實現(xiàn)。
3,接口進一步深化了標準的思想,接口本身就是一個標準,
他起到了降低耦合性的作用,接口可以使方法的定義和實現(xiàn)相分離,也就是將接口的定義者和實現(xiàn)者相分離,
接口也可以用于降低模塊間或系統(tǒng)間的耦合性。
針對接口編程可以屏蔽不同實現(xiàn)間的差異,看到的只是實現(xiàn)好的功能。
練習:
在原有的雇員練習上修改代碼:
公司會給SalariedEmployee每月另外發(fā)送2000元加班費
給BasePlueSalesEmployee發(fā)放1000元加班費
改寫原有的代碼,加入以上的邏輯
并寫一個方法,打印出本月公司總共發(fā)放了多少加班費
練習:
驗證歌德巴赫猜想,輸入一個大于6的偶數(shù),請輸出這個偶數(shù)能被分解為哪兩個質(zhì)數(shù)的和
如 10=3+7 12=5+7
質(zhì)數(shù):除了1和自身,不能被任何數(shù)整除的數(shù)
要求:兩個人一組合作完成,一個人負責拆數(shù),另一個人負責寫方法,判斷一個數(shù)是不是質(zhì)數(shù)
接口:定義標準,
接口的實現(xiàn):實現(xiàn)標準
接口的調(diào)用者:標準的使用
針對接口編程原則,也就是按照標準實現(xiàn)。
接口的定義者定義好了標準,接口的使用者就可以寫使用代碼,接口的實現(xiàn)者寫好實現(xiàn)之后把實現(xiàn)對象傳入接口的使用者中。
他調(diào)用接口中方法也就是掉用接口實現(xiàn)中的方法。
這種過程叫做接口的回調(diào)(先有標準使用者,后有標準實現(xiàn)者,把標準的實現(xiàn)者對象傳給使用者,再由使用者通過接口調(diào)用標準實現(xiàn)者的方法)。
作業(yè):
1、體驗接口回調(diào)
根據(jù)文檔和給定的class文件,實現(xiàn)接口,并且將實現(xiàn)類的對象作為參數(shù)調(diào)用Match類中的match方法,實現(xiàn)石頭剪刀布的游戲
2、接口
為SavingAccount和CreditAccount各自添加一個子類
LoanSavingAccount類:用戶可以貸款,不可以透支
LoanCreditAccount類:用戶可以貸款,可以透支
說明:貸款和透支是不一樣的,透支指的是賬戶余額小于0,而貸款用戶需要一個貸款額的屬性.
在ATM機上,用戶可以選擇貸款,也可以選擇還貸款,而還貸款就是要把賬戶余額上的資金轉(zhuǎn)到貸款額上
例如:用戶余額10000元,貸款額100000元,用戶可以選擇還款5000元,則用戶余額變?yōu)?000,貸款額變?yōu)?5000元.
利用接口來抽象出LoanSavingAccount類和LoanCreditAccount類的共性
接口中的方法:
requestLoan:貸款
payLoan:還貸
getLoan:獲取用戶貸款總額
為Bank類添加三個方法,
貸款:參數(shù) id,貸款額,返回修改過的Account對象
還貸款:參數(shù) id,還款額,返回修改過的Account對象
統(tǒng)計所有賬戶貸款的總數(shù)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -