日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于面向对象以及三大特征的解释

發(fā)布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于面向对象以及三大特征的解释 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)于面向?qū)ο笠约叭筇卣鞯慕忉?/span>


面向?qū)ο?#xff1a;

????????????? 在C語言編程中是面向過程而在Java編程中是面向?qū)ο蟮?/span>面向過程更重要的是看重實現(xiàn)的具體過程,面向?qū)ο罂粗氐氖墙Y(jié)果,不管其里面的具體過程,只看結(jié)果。

?????????????? 舉一個例子:我們從住的地方到公司去上班的方法:一個是自己開車一個是打車

? ? ? ? ? ? ? ? 面向過程:就是相當(dāng)于自己開車,自己需要去關(guān)注行駛的路線,同時還要自己開車。

? ? ? ? ? ? ? ? 面向?qū)ο?#xff1a;就是相當(dāng)于打車,自己不用關(guān)心具體怎么走,你只需要將地點告訴司機就可以了,只管最后到達公司。

???????????? 面向?qū)ο竽壳笆橇餍械囊环N編程思想,它貼近于我們的生活,滿足大自然的規(guī)律。面向?qū)ο笥腥筇卣?#xff1b;封裝、繼承、多態(tài)。

封裝:

????????????面向?qū)ο缶褪且苑庋b為基本,封裝就是對外只提供使用,對內(nèi)部的方法和數(shù)據(jù)進行包裝對面隱藏,能夠保證模塊的獨立性。

詳解:封裝,就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。一個類就是一個封裝了數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼的邏輯實體。在一個對象內(nèi)部,某些代碼或某些數(shù)據(jù)可以是私有的,不能被外界訪問。通過這種方式,對象對內(nèi)部數(shù)據(jù)提供了不同級別的保護,以防止程序中無關(guān)的部分意外的改變或錯誤的使用了對象的私有部分。

繼承:

??????????? 自己新寫一個類可以從已有的類(基類)派生出來,派生出來的類是子類,基類是父類。子類可以從父類那里繼承到方法和實例變量,并且可以修改和增加方法來滿足當(dāng)前的需要通過繼承可以滿足代碼的重用性。繼承分為類繼承和實現(xiàn)接口。

? ? ?繼承類:一個類只能繼承一個類,這跟現(xiàn)實生活中也是一樣的。有普通類和抽象類,繼承抽象類必須實現(xiàn)里面的抽象方法;

? ? ?實現(xiàn)接口:實現(xiàn)接口必須實現(xiàn)里面所有的方法,一個類可以實現(xiàn)多個接口

? ? 在這里有必要說一下接口和抽象方法的區(qū)別:

????????????接口:接口是一組行為規(guī)范的定義,通俗的說就是生產(chǎn)一個東西時要滿足的功能。定義接口時里面的方法都是抽象方法,變量都是默認(rèn)public static final,方法隱式指定為public abstract。可以實現(xiàn)多個接口。

? ? ? ? ?抽象方法:抽象方法是表示對象的根源通俗的說就是兩個東西的祖宗是什么,比如說貓和狗都是動物。抽象方法可以部分方法是實現(xiàn)方法,部分是抽象方法,只能繼承一個抽象類。


抽象方法和接口的比較如下:


在討論它們之間的不同點之前,我們先看看抽象類、接口各自的特性。

抽象類

抽象類是用來捕捉子類的通用特性的 。它不能被實例化,只能被用作子類的超類。抽象類是被用來創(chuàng)建繼承層級里子類的模板。以JDK中的GenericServlet為例:

123456789public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {????// abstract method????abstract void service(ServletRequest req, ServletResponse res);????void init() {????????// Its implementation????}????// other method related to Servlet}

當(dāng)HttpServlet類繼承GenericServlet時,它提供了service方法的實現(xiàn):

123456789101112131415public class HttpServlet extends GenericServlet {????void service(ServletRequest req, ServletResponse res) {????????// implementation????}????protected void doGet(HttpServletRequest req, HttpServletResponse resp) {????????// Implementation????}????protected void doPost(HttpServletRequest req, HttpServletResponse resp) {????????// Implementation????}????// some other methods related to HttpServlet}

接口

接口是抽象方法的集合。如果一個類實現(xiàn)了某個接口,那么它就繼承了這個接口的抽象方法。這就像契約模式,如果實現(xiàn)了這個接口,那么就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。以Externalizable接口為例

123456public interface Externalizable extends Serializable {????void writeExternal(ObjectOutput out) throws IOException;????void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;}

當(dāng)你實現(xiàn)這個接口時,你就需要實現(xiàn)上面的兩個方法:

12345678910111213141516171819public class Employee implements Externalizable {????int employeeId;????String employeeName;????@Override????public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {????????employeeId = in.readInt();????????employeeName = (String) in.readObject();????}????@Override????public void writeExternal(ObjectOutput out) throws IOException {????????out.writeInt(employeeId);????????out.writeObject(employeeName);????}}


抽象類和接口的對比(速度?添加 默認(rèn) 實現(xiàn) 訪問Java main)

參數(shù)抽象類接口
默認(rèn)的方法實現(xiàn)它可以有默認(rèn)的方法實現(xiàn)接口完全是抽象的。它根本不存在方法的實現(xiàn)
實現(xiàn)子類使用extends關(guān)鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現(xiàn)。子類使用關(guān)鍵字implements來實現(xiàn)接口。它需要提供接口中所有聲明的方法的實現(xiàn)
構(gòu)造器抽象類可以有構(gòu)造器接口不能有構(gòu)造器
與正常Java類的區(qū)別除了你不能實例化抽象類之外,它和普通Java類沒有任何區(qū)別接口是完全不同的類型
訪問修飾符抽象方法可以有publicprotecteddefault這些修飾符接口方法默認(rèn)修飾符是public。你不可以使用其它修飾符。
main方法抽象方法可以有main方法并且我們可以運行它接口沒有main方法,因此我們不能運行它。
多繼承抽象方法可以繼承一個類和實現(xiàn)多個接口接口只可以繼承一個或多個其它接口
速度它比接口速度要快接口是稍微有點慢的,因為它需要時間去尋找在類中實現(xiàn)的方法。
添加新方法如果你往抽象類中添加新的方法,你可以給它提供默認(rèn)的實現(xiàn)。因此你不需要改變你現(xiàn)在的代碼。如果你往接口中添加方法,那么你必須改變實現(xiàn)該接口的所有類。

什么時候使用抽象類和接口

  • 如果你擁有一些方法并且想讓它們中的一些有默認(rèn)實現(xiàn),那么使用抽象類吧。(默認(rèn)實現(xiàn))
  • 如果你想實現(xiàn)多重繼承,那么你必須使用接口。由于Java不支持多繼承,子類不能夠繼承多個類,但可以實現(xiàn)多個接口。因此你就可以使用接口來解決它。(多重繼承)
  • 如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實現(xiàn)了該接口的類。(基本功能不斷變化)

Java8中的默認(rèn)方法和靜態(tài)方法

Oracle已經(jīng)開始嘗試向接口中引入默認(rèn)方法和靜態(tài)方法,以此來減少抽象類和接口之間的差異。現(xiàn)在,我們可以為接口提供默認(rèn)實現(xiàn)的方法了并且不用強制子類來實現(xiàn)它。這類內(nèi)容我將在下篇博客進行闡述。

參考博文:http://www.importnew.com/12399.html

多態(tài):

? ? ?多態(tài),是指一個類實例的相同方法不同情形有不同表現(xiàn)形式多態(tài)機制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口。這意味著,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調(diào)用。

重寫(覆蓋)和重載:

重載(Overloading)

?方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型。

? 重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。

??Java的方法重載,就是在類中可以創(chuàng)建多個方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。

?調(diào)用方法時通過傳遞給它們的不同參數(shù)個數(shù)和參數(shù)類型來決定具體使用哪個方法, 這就是多態(tài)性。

?重載的時候,方法名要一樣,但是參數(shù)類型和個數(shù)不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。


父類方法被默認(rèn)修飾時,只能在同一包中,被其子類被重寫,如果不在同一包則不能重寫。

類的方法被protected修飾時,不僅在同一包中,被其子類被重寫,還可以不同包的子類重寫。

?

重寫方法的規(guī)則

1)、參數(shù)列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。

2)、返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。

3)、訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)

4)、重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:

父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。

?

而重載的規(guī)則:

1)、必須具有不同的參數(shù)列表;

2)、可以有不同的返回類型,只要參數(shù)列表不同就可以了;

3)、可以有不同的訪問修飾符;

4)、可以拋出不同的異常;


重載和重寫(覆蓋)的特點:


1. Override 特點

  1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達到覆蓋的效果;

  2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

  3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;

  4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。

2.Overload 特點

  1、在使用重載時只能通過不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個參數(shù)類型必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int));

  2、不能通過訪問權(quán)限、返回類型、拋出的異常進行重載;

  3、方法的異常類型和數(shù)目不會對重載造成影響;

  4、對于繼承來說,如果某一方法在父類中是訪問權(quán)限是priavte,那么就不能在子類對其進行重載,如果定義的話,也只是定義了一個新方法,而不會達到重載的效果。



總結(jié):

override(重寫)

   1、方法名、參數(shù)(參數(shù)個數(shù)和參數(shù)類型)、返回值完全相同。(自身特點)

   2、子類方法不能縮小父類方法的訪問權(quán)限。(public >?protected >private)

  ?3、子類方法不能拋出比父類方法更寬泛的異常(父類IOException,子類Exception(不行)但子類方法可以不拋出異常)。

   4、存在于父類和子類之間。

   5、方法被定義為final不能被重寫。

 overload(重載)

  1、參數(shù)類型、個數(shù)、順序至少有一個不相同。 (自身特點)

  2、不能重載只有返回值不同的方法名

  3、存在于父類和子類、同類中。

參考博文:https://blog.csdn.net/linzhaojie525/article/details/55213010

參考博文:https://blog.csdn.net/super_xiaoY/article/details/53484060

總結(jié)

以上是生活随笔為你收集整理的关于面向对象以及三大特征的解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。