首先題外話,java的char變量能不能存儲一箇中文漢字?
答:能,但是不完全能。java中的編碼是unicode。在Java中,char的長度是2字節,即16位,2的16次方是65536。
而unicode字符集是用二進制表示的,至於用UTF8還是其它的編碼方式是另一回事。也就是說漢字中在unicode的編碼中小於65536的都可以表示。
抽象類和接口的相同點:
1.都不能實例化。
2.都可以作爲引用類型。
A和B分別爲一個抽象類和接口。AImpl和BImpl分別爲對應的繼承和實現。
則寫法 A a = new AImpl 和 B b = new BImpl 成立。
3.一個類如果繼承了某個抽象類或者實現某個接口,都需要對其中的抽象方法全部實現,否則依然是不可實例化的。
抽象類和接口的不同點:
1.抽象類可以定義構造方法,接口不行
2.抽象類中可以有抽象方法和具體方法,接口只能有抽象方法。
3.抽象類的方法可以是private、默認、protected、public,而接口只能是public
4.抽象類的成員變量可以不初始化,接口必須初始化(實際上接口的成員變量都是常量)。
這裏解釋一下,因爲接口沒有初始化方法。所以無法通過自身行爲去修改屬性。而如果作爲被實現類調用修改,或者說變量是靜態變量,可以A.x = xxx,這樣實現的話,則和抽象類沒有區別,無法體現接口更高的抽象。
5.抽象類中可以包含靜態方法,接口中無法包含靜態方法。
6.一個類只能實現一個抽象類,但是一個類可以實現多個接口。
PS:有抽象方法的類必須聲明爲抽象類,而抽象類未必要有抽象方法。