1. 程式人生 > >C語言的結構體和java的類異同

C語言的結構體和java的類異同

結構體跟類的概念確實有點像,尤其是跟C++中的類。
先說相同點:
(1)結構體和類都可以實現對於資料的封裝,比如將一輛車定義為由多個部分組成,如車身、車輪、車燈等。
(2)結構體和類都是可以巢狀的,比如
C/C++ code?
12345struct A{struct B{int a;};};

Java code?
1234class A{class B{}}

但是不同在於:
(1)C語言中結構體中只可以定義成員變數,如果你說你在結構體中可以定義成員函式和建構函式,那應該是C++而不是C語言,C語言作為面向過程的語言是要將資料和演算法進行分離的。Java的類除了可以封裝成員變數,還可以封裝成員函式,也就是對於成員變數的操作。

(2)結構體中的成員變數都是可以直接訪問的,而類則可以通過宣告public、protected、private或者不加許可權修飾符來進行訪問許可權的控制。另外類是可以繼承的,子類可以通過繼承獲得父類的一些屬性或者方法,這是結構體所不具有的。
(3)結構體僅僅是封裝資料用的,也可以說僅僅是自定義的一種變數型別;而java作為一種純面嚮物件語言,將所有東西都封裝在類中,包括程式執行入口的Main方法。
(4)要單純說Java的類相對於C語言結構體的優勢,倒不如巨集觀上看面向物件程式設計思想和麵向過程程式設計思想的區別,這是兩種不同的思維方式,樓主可以看一下比較經典的斐波那契數列的面向過程解題方法和麵向物件解題方法。