跳到主要內容

發表文章

目前顯示的是 6月, 2011的文章

Java Interface 筆記

Interface存在的原因有二: 1.能夠向上轉型為多個型別 2.讓客戶端無法產生物件,確保"介面"的設計意義 如果使用的base class不帶任何函式定義式或任何成員變數 應優先選用Interface,其次才考慮abstract class 基本上在確定某些東西會成為base class,優先考量就是使他成為Interface 過度使用Interfaces會帶來額外的複雜度,必須確定有需求再使用 在類別實作多個Interface時 有不同的Interface間採用相同的method命名會導致出錯,應避免此情形 將Interfaces置於某個class中會形成巢狀的Interfaces 巢狀的Interfaces可以為private,意義是實作他的類別在外部不能向上轉型 而巢狀位於另一個Interface內時,那些Interfaces會自動成為public

Java使用多形時可能犯的錯誤

1.覆寫 private method import static net.mindview.util.Print.*; public class PrivateOverride{     private void f(){  print("private f()"); }     public static void main(String[] args){         privateOverride po = new Derived();         po.f();     } } class Derived extends PrivateOverride{     public void f(){  print("public f()"); } } //output:private f() private method會自動成為final,也會被derived class遮蔽 例子中的Derived的f()是新的method 2.fields及static methods 物件只有一般的method可以是多形 假如base class 與 derived class 有相同的data member derived class實際上包含了兩個同名的field,其中一個是繼承而來的 只是要呼叫base class的field就必須使用 super.field 的形式來取得 不過在實務上幾乎不會發生,將fields都宣告為private而不直接存取才是避免混淆的方法 static methos是伴隨著物件,而非個別的objects

Java基本型別資訊

Java在運作上還是會將基本型別轉換成物件 透過自動封箱(autoboxing)將基本型別轉換成外覆類別 Java在class的data member為基本型別時會給予預設值 但在區域變數則不成立並會引發錯誤 所以在建立基本型別的物件時最好還是給訂初始值 基本型別              大小           外覆類型            預設值 boolean                  -               Boolean              false char                    16-bit           Character           '\u0000'(null) byte                      8-bit           Byte                   (byte)0 short                   16-bit           Short                  (short)0 int                       32-bit           Integer                0 long                    64-bit           Long                   0L float                    32-bit           Float                   0.0f double                64-bit           Double                0.0d 高精度數值 BigInteger       -  提供的整數支援任意精度,可以很精確的表達任意長度的整數數值 BigDecimal    -  提供任意精度的定點數,在需要精確小數點後計算的場合中適用 高精度的以上兩個類別雖然可以被視為外覆類別,但沒有對應的基本型別 在int或float型別能做到的在這兩個型別也能做到 只是必須以函式叫用方式取代基本型別的運算子,且速度比較慢 屬於以速度換取精度