-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
不能直接實(shí)例化接口,
接口不包含方法的實(shí)現(xiàn),
接口、類和結(jié)構(gòu)可以從多個(gè)接口繼承,
但是C#只支持但繼承:類只能從一個(gè)基類繼承實(shí)現(xiàn)。
接口、類和結(jié)構(gòu)可以從多個(gè)接口繼承,
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員,
接口可以包含事件、索引器、方法和屬性,
一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
類和接口的區(qū)別(java類和接口的區(qū)別)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于類和接口的區(qū)別的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
ChatGPT國(guó)內(nèi)免費(fèi)在線使用,能給你生成想要的原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
你只需要給出你的關(guān)鍵詞,它就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端,官網(wǎng):https://ai.de1919.com
本文目錄:
一、c#接口與類的區(qū)別!
接口與類不同點(diǎn):
接口與類相同點(diǎn):
二、抽象類和接口的區(qū)別是什么?
抽象類和接口的主要區(qū)別是,定義不同、方法不同、成員變量不同,具體如下:
一、定義不同
1、抽象類
抽象類表示該類中可能已經(jīng)有一些方法的具體定義。
2、接口
接口僅僅只能定義各個(gè)方法的界面(方法名,參數(shù)列表,返回類型),并不關(guān)心具體細(xì)節(jié)。
二、方法不同
1、抽象類
抽象類當(dāng)中可以存在非抽象的方法。
2、接口
接口里面的方法只是一個(gè)聲明必須用public來(lái)修飾沒(méi)有具體實(shí)現(xiàn)的方法。
三、成員變量不同
1、抽象類
抽象類中的成員變量可以被不同的修飾符來(lái)修飾。
2、接口
接口中的成員變量默認(rèn)的都是靜態(tài)常量。
以上內(nèi)容參考 百度百科-抽象類
三、C#中的接口和類有什么異同?
實(shí)在看不下去國(guó)內(nèi)那些裝X的大佬程序員了。別人一問(wèn)接口和類的區(qū)別聯(lián)系,竄上來(lái)就扯什么public,什么屬性索引,什么誰(shuí)能繼承誰(shuí),誰(shuí)不能繼承誰(shuí)的,咋地,我還要畫張地圖去造迷宮呀。
看到我的回答,我覺(jué)得很多入門的程序員都能走出這個(gè)邊問(wèn)邊記邊理解,最后發(fā)現(xiàn)還是不知所云的怪圈。
總體來(lái)說(shuō),有了類,才有了接口,有了接口才有了抽象類,不要懷疑這個(gè)順序,沒(méi)錯(cuò),和你在網(wǎng)上看到的都不一樣,很不理解吧。看完回答,你或許發(fā)現(xiàn),這樣理解反而好很多。
首先是繼承,類是單一繼承的,這個(gè)應(yīng)該都有百度看到過(guò),但是這句話是個(gè)坑,單一繼承只是從子類的角度去說(shuō)的。因?yàn)橐粋€(gè)子類只能有一個(gè)父類,但是一個(gè)父類是可以有很多個(gè)子類的。
言歸正傳,抽象類和類在繼承上是完全沒(méi)有區(qū)別的,不要被abstract關(guān)鍵字迷惑,這個(gè)東西只是對(duì)子成員進(jìn)行一個(gè)限制作用的。奧,補(bǔ)充一點(diǎn)就是抽象類不能被實(shí)例化(算是繼承層面唯一用到abstract的一點(diǎn)),這個(gè)可以作為本能認(rèn)知,你說(shuō)我都這么抽象了,你還去實(shí)現(xiàn)我,阿拉丁呀。
接著是接口,接口的繼承關(guān)系就比較好理解了,一個(gè)類可以繼承多個(gè)接口,接口可以繼承多個(gè)接口,抽象類也可以繼承多個(gè)接口,所以,接口真的就是規(guī)范。
問(wèn)題來(lái)了,為什么我認(rèn)為先有接口,后有抽象類呢?
場(chǎng)景是這樣的,你想寫一大批類,但是發(fā)現(xiàn)這些類有很多公用屬性,比如id,創(chuàng)建時(shí)間,創(chuàng)建人等等,所以你想寫一個(gè)通用類,來(lái)把這些東西寫一遍就過(guò),所以有了基類。
你想規(guī)范每個(gè)類的功能方法,所以有了接口,但是你發(fā)現(xiàn)只是規(guī)范,沒(méi)有實(shí)現(xiàn),這也就意味著你需要把所有接口方法都實(shí)現(xiàn)一遍,可是你發(fā)現(xiàn)很多方法和屬性一樣,也是重復(fù)的,比如獲取id,數(shù)據(jù)庫(kù)的增刪改查等等,所以你又想把這些方法統(tǒng)一的進(jìn)行實(shí)現(xiàn)。這個(gè)需求簡(jiǎn)單來(lái)說(shuō),就是又想約束,又想有部分實(shí)現(xiàn),這時(shí)候出現(xiàn)了抽象類。是的,約束作用的就是抽象類里的抽象方法,實(shí)現(xiàn)的就是抽象類里的真實(shí)方法。
補(bǔ)充:虛方法和抽象方法。抽象方法只能在抽象類中,而且他的子類必須重寫抽象方法,誰(shuí)讓人家起到約束作用呢。虛方法可以在任何類中,除了密封類,因?yàn)檫@個(gè)東西不能被繼承。虛方法有方法體,抽象方法沒(méi)有的。虛方法可以被重寫,也可以不被重寫,但是抽象方法必須被實(shí)現(xiàn)的子類重寫,這個(gè)有點(diǎn)碰瓷的意思。子類你撞了我,你必須給我實(shí)現(xiàn)我的所有虛幻的愿望。
最后就是這個(gè)虛方法,這個(gè)東西你重寫了,重寫后的方法比原始的優(yōu)先級(jí)就高,不重寫,就去調(diào)用原始的虛方法
四、抽象類和接口的區(qū)別
抽象類和接口的區(qū)別如下:
1、普通方法提供方法體
接口里只能包含抽象方法,靜態(tài)方法和默認(rèn)方法,不能為普通方法提供方法實(shí)現(xiàn),抽象類則完全可以包含普通方法,接口中的普通方法默認(rèn)為抽象方法。
2、publicstaticfinal賦值
抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是publicstaticfinal類型的,并且必須賦值,否則通不過(guò)編譯。
3、構(gòu)造器
接口不能包含構(gòu)造器,抽象類可以包含構(gòu)造器,抽象類里的構(gòu)造器并不是用于創(chuàng)建對(duì)象,而是讓其子類調(diào)用這些構(gòu)造器來(lái)完成屬于抽象類的初始化操作。
4、初始化塊
接口里不能包含初始化塊,但抽象類里完全可以包含初始化塊。
5、繼承一個(gè)抽象類、多個(gè)接口
一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
以上就是關(guān)于類和接口的區(qū)別相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
眺望山野的平臺(tái)景觀設(shè)計(jì)(眺望山間景色)
一個(gè)公司的營(yíng)銷策略(一個(gè)公司的營(yíng)銷策略有哪些)