類有哪些基本特征及結(jié)構(gòu)體的區(qū)別
類有哪些基本特征及結(jié)構(gòu)體的區(qū)別
類是面向?qū)ο蟪绦蛟O(shè)計中的概念,是面向?qū)ο缶幊痰幕A(chǔ)。以下是學(xué)習(xí)啦小編為大家整理的類的基本特征,希望你們喜歡。
類的簡介
類的實質(zhì)是一種數(shù)據(jù)類型,類似于int、char等基本類型,不同的是它是一種復(fù)雜的數(shù)據(jù)類型。因為它的本質(zhì)是類型,而不是數(shù)據(jù),所以不存在于內(nèi)存中,不能被直接操作,只有被實例化為對象時,才會變得可操作。
類是對現(xiàn)實生活中一類具有共同特征的事物的抽象。如果一個程序里提供的類型與應(yīng)用中的概念有直接的對應(yīng),這個程序就會更容易理解,也更容易修改。一組經(jīng)過很好選擇的用戶定義的類會使程序更簡潔。此外,它還能使各種形式的代碼分析更容易進(jìn)行。特別地,它還會使編譯器有可能檢查對象的非法使用。
類的內(nèi)部封裝了方法,用于操作自身的成員。類是對某種對象的定義,具有行為(be-havior),它描述一個對象能夠做什么以及做的方法(method),它們是可以對這個對象進(jìn)行操作的程序和過程。它包含有關(guān)對象行為方式的信息,包括它的名稱、實現(xiàn)操作的函數(shù)和實現(xiàn)屬性的數(shù)據(jù)。
類的構(gòu)成包括數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員對應(yīng)類的屬性,類的數(shù)據(jù)成員也是一種數(shù)據(jù)類型,并不需要分配內(nèi)存。成員函數(shù)則用于操作類的各項屬性,是一個類具有的特有的操作,比如“學(xué)生”可以“上課”,而“水果”則不能。類和外界發(fā)生交互的操作稱為接口。
類的三大特性
封裝性
將數(shù)據(jù)和操作封裝為一個有機(jī)的整體,由于類中私有成員都是隱藏的,只向外部提供有限的接口,所以能夠保證內(nèi)部的高內(nèi)聚性和與外部的低耦合性。用者不必了解具體的實現(xiàn)細(xì)節(jié),而只是要通過外部接口,以特定的訪問權(quán)限來使用類的成員,能夠增強(qiáng)安全性和簡化編程。
繼承性
繼承性更符合認(rèn)知規(guī)律,使程序更易于理解,同時節(jié)省不必要的重復(fù)代碼。
多態(tài)性
同一操作作用于不同對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。在運行時,可以通過指向基類的指針,來調(diào)用實現(xiàn)派生類中的方法。
類與結(jié)構(gòu)體的區(qū)別
在C++、C#語言中,class和struct都可以定義一個類,它們的區(qū)別如下:
C#中,class是引用類型,繼承自System.Object類;struct是值類型,繼承自System.ValueType類,不具多態(tài)性。但是注意,System.ValueType是個引用類型。
從職能觀點來看,class表現(xiàn)為行為;而struct常用于存儲數(shù)據(jù)。
class支持繼承,可以繼承自類和接口;而struct沒有繼承性,struct不能從class繼承,也不能作為class的基類,但struct支持接口繼承。
class可以聲明無參構(gòu)造函數(shù),可以聲明析構(gòu)函數(shù);而struct只能聲明帶參數(shù)構(gòu)造函數(shù),且不能聲明析構(gòu)函數(shù)。因此,struct沒有自定義的默認(rèn)無參構(gòu)造函數(shù),默認(rèn)無參構(gòu)造器只是簡單地把所有值初始化為它們的0等價值。
Java/C#中,實例化時,class要使用new關(guān)鍵字;而struct可以不使用new關(guān)鍵字,如果不以new來實例化struct,則其所有的字段將處于未分配狀態(tài),直到所有字段完成初始化,否則引用未賦值的字段會導(dǎo)致編譯錯誤。
class可以實現(xiàn)抽象類(abstract),可以聲明抽象函數(shù);而struct為抽象,也不能聲明抽象函數(shù)。
class可以聲明protected成員、virtual成員、sealed成員和override成員;而struct不可以,但是值得注意的是,struct可以重載System.Object的3個虛方法,Equals()、ToString()和 GetHashTable()。
class的對象復(fù)制分為淺拷貝和深拷貝,必須經(jīng)過特別的方法來完成復(fù)制;而struct創(chuàng)建的對象復(fù)制簡單,可以直接以等號連接即可。
class實例由垃圾回收機(jī)制來保證內(nèi)存的回收處理;而struct變量使用完后立即自動解除內(nèi)存分配。
作為參數(shù)傳遞時,class變量是以按址方式傳遞;而struct變量是以按值方式傳遞的。
我們可以簡單的理解,class是一個可以動的機(jī)器,有行為,有多態(tài),有繼承;而struct就是個零件箱,組合了不同結(jié)構(gòu)的零件。其實,class和struct最本質(zhì)的區(qū)別就在于class是引用類型,內(nèi)存分配于托管堆;而struct是值類型,內(nèi)存分配于線程的堆棧上。由此差異,導(dǎo)致了上述所有的不同點。所以只有深刻的理解內(nèi)存分配的相關(guān)內(nèi)容,才能更好的駕馭。
當(dāng)然,使用class基本可以替代struct的任何場合,class后來居上。雖然在某些方面struct有性能方面的優(yōu)勢,但是在面向?qū)ο缶幊汤铮臼莄lass橫行的天下。
那么,有人不免會提出,既然class幾乎可以完全替代struct來實現(xiàn)所有的功能,那么struct還有存在的必要嗎?答案是,至少在以下情況下,鑒于性能上的考慮,我們應(yīng)該考慮使用struct來代替class:
實現(xiàn)一個主要用于存儲數(shù)據(jù)的結(jié)構(gòu)時,可以考慮struct。
struct變量占有堆棧的空間,因此只適用于數(shù)據(jù)量相對小的場合。
struct數(shù)組具有更高的效率。
類的主要詞性變化
◎ 類 lèi 〈動〉
(1)相似;像 [resemble;be similar to]
遂入,殺孟陽于床。曰:"非君也,不類。"--《左傳·莊公八年》
不類前人。--《論衡·自紀(jì)》
益奇而堅,其疏數(shù)偃仰,類智者所施設(shè)也。--唐·柳宗元《小石城山記》
與張氏之吝書若不相類。-- 清·袁枚《黃生借書說》
(2) 又
令黃生貧類予,其借書亦類予。
語類楚聲。-- 明·魏禧《大鐵椎傳》
絕類彌勒。--明·魏學(xué)洢《核舟記》
畫虎不成反類犬
(3) 類比;類推 [analogy;reason by]義不殺少而殺眾,不可謂知類。--《墨子》
(4) 又如:類推
(5) 通"戾"。偏,不平 [bias]
夫富貴者則類,傲之;夫貧賤者則求柔之;是非仁人之情也。--《荀子·不茍》
◎ 類 lèi 〈副〉
大抵;大都 [generally;in the main;mostly]
觀古今文人,類不護(hù)細(xì)行。--三國 魏·曹丕《與吳質(zhì)書》
走卒類士服。--宋· 司馬光《訓(xùn)儉示康》
看過“類的三大特性”的人還看了:
2.秋季種什么蔬菜
3.什么是英語短語
4.語文中什么是代詞