五。C語言結構的替代
如何用Java模擬c語言中的一些結構
第19條:用類代替結構
對於C語言中的結構,Java可以用類來代替,不過你不應讓類的成員變量可以被公開訪問,成員變量應該是private,然後提供一些讀寫操作來操縱這些變量,想比於C或者C++裡的結構類型,這樣的類更為安全,體現了OOP的封裝性。示例代碼
public class Point{
private float x;
private float y;
public float getX(){ return x;}
public float getY(){ return y;}
public void setX(int x){ this.x=x;}
public void setY(int y){ this.y=y;}
}
第20條:用類層次來代替聯合
對於這點,俺不詳細說明了,有興趣的自己看看聯合是怎麼回事。書中舉了著名的shape例子
第21條:用類來代替枚舉結構
Java取消了C語言中的枚舉類型(注意:jdk5.0已經增加了這一特性,有興趣的自己查找下資料),這裡談的是如何在5.0以前模擬這一結構。
C語言:typedef enum{ CIRCLE,RECTANGLE,SQUARE} shape;
Java語言:
public class shape{
private final String name;
public shape(String name) { this.name=name;}
public String toString(){ return name;}
public static final shape CIRCLE=new shape("CIRCLE");
public static final shape RECTANGLE=new shape("RECTANGLE");
public static final shape SQUARE=new shape("SQUARE");
}
以後就可以用shape.CIRCLE,shape.SQUARE來訪問其中的變量,可以看到,Java的實現模型更為安全,它進行了類型檢查。很漂亮的設計!
第22條:使用類和接口來代替函數指針
Java沒有獨立於類或者接口的函數,任何方法都是包含在某個類和實例裡面,所以,在C裡面的函數指針就完全可以用類和接口來代替,很明顯的例子,如compareable接口,某個需要實現排序的數組,在調用
Arrays.sort()時,你可以傳入一個實現了compareable接口的比較器。這就相當於一個函數指針。