Java和C#在面向對象上語法的區別

来源:http://www.cnblogs.com/androidshouce/archive/2016/07/18/5679990.html
-Advertisement-
Play Games

面向對象是一種開發思想,最應該記住的一句話是萬物皆對象。為了讓程式更好的被理解和編寫,把現實生活中描述事物的方式和思路融合進入,就成了面向對象的思想。把生活中的事物融合進程式中那麼就需要描述,描述分為特征和行為兩方面,而不同類別的對象特征和行為具有巨大的差異,為了更好的制定描述每一類事物的方式,那麼 ...


 面向對象是一種開發思想,最應該記住的一句話是萬物皆對象。為了讓程式更好的被理解和編寫,把現實生活中描述事物的方式和思路融合進入,就成了面向對象的思想。把生活中的事物融合進程式中那麼就需要描述,描述分為特征和行為兩方面,而不同類別的對象特征和行為具有巨大的差異,為了更好的制定描述每一類事物的方式,那麼提取來一個編程世界中的類的概念,等同於生活中的類型的概念,每一種事物都應該是有類型的。然後生活中的事物按不同的方面進行分類的話,可以劃入不同的類別,所有編程中的類也是一個公說公有理,婆說婆有理的玩意,相當的抽象,具有相當的不確定性和隨意性。

  類的構成:

  Java中的類,包含屬性和方法。屬性即類中的變數,可分靜態變數、實例變數(全局變數)、局部變數(存在於方法中,聲明周期僅限於該方法的調用階段)

  C#中的類,包含欄位、屬性和方法。欄位對應java中的屬性,C#中的屬性對象java中的get和set訪問器,是對欄位的封裝,方法一樣,都是描述行為。

  類成員的調用:

  實例成員由對象調用。靜態成員由類調用。但是在java中靜態成員也可以被實例調用,相當於班上的每一個學生都可以任意的支配班費了,很不好的一個問題。C#在這方面嚴格限制了,靜態成員只能有類進行調用。

  三大特性-封裝

  封裝:為了隱藏內部的實現細節,達到對數據安全性的保護和代碼重用的效果的一種手段。

  封裝無處不在,看似簡單卻可無限延伸。並沒有一個明確的關鍵字來表示封裝。既然是思想,是手段,所有在java中和c#中是沒有語法區別的。僅僅是他們在藉助訪問修飾符來達到封裝的效果時,兩種語言的訪問修飾符是不一樣的。

  Java中:

  private:私有的,僅內部可以訪問

  dufault:預設的,同一包的內部可以訪問。

  protected:受保護的,同一包中或者是不同包的子類中可以訪問。

  public:公共的,任何地方可以訪問。

  特點:有明確的大小統屬關係:private < default < protected < public

  C#中(引入程式集的概念。命名空間類似於java中的包,但它是邏輯分組不同於java中的包是物理分組,程式集類似於一個項目):

  private:私有的,僅內部可以訪問。

  intenal:內部的,同一程式集的內部可以訪問,同default。

  protected:受保護的,子類中可以訪問,和java中protected是不同的,此處範圍要小些,同程式集的非子類不能訪問。

  proteted intenal:是intenal和protected訪問範圍的並集。

  public:公共的,任何地方可以訪問。

  特點:沒有明確的大小統屬關係,intenal和protected的訪問範圍大小是分不清的。

 

三大特性-繼承   繼承:目的是為了讓一個類擁有另一個類的屬性和方法。

  Java中:使用extends表示使用繼承

  重寫的要求:a、方法名、返回值類型、參數相同;b、訪問修飾符訪問範圍要大於或等於父類方法訪問修飾符;

  訪問父類成員:使用super關鍵字,可使用super(參數);在構造方法中指定調用父類一個構造方法。

  C#中:使用:表示使用繼承

  重寫的要求:a、方法名、返回值類型、參數、訪問修飾符相同;b、父類方法被virtual修飾,子類方法被override修飾

  訪問父類成功:使用base關鍵字,在構造方法後使用:base(參數);指定調用父類構造方法,base不能使用在靜態環境中,不能調用父類靜態成員。

  覆蓋:使用new關鍵字。在c#中引入覆蓋的內容,對父類的非virtual方法,也就是不可重寫的方法,使用覆蓋,可以覆蓋掉父類的方法。對覆蓋我的看法是為了彌補必須被virtual修飾的方法才能重寫這個限制可能帶來的問題,但是能不用就不用,覆蓋意義不大,或者說是我還沒有真切體會到覆蓋的實際作用和使用場合,有高人可以評論解惑。

  判斷是否重寫成功的依據:使用父類的引用指向子類的對象,如果該方法調用的是父類方法說明重寫不成功,如果調用到子類方法,說明重寫成功。

  三大特性-多態

  多態:同一種行為的多種存在形態。表現形式有:重載、重寫。

  重載要求:a、同一類中;b、方法名相同;c、參數不同(參數個數、類型、順序)。

  調用時根據傳入的參數來決定調用到哪一方法。

  抽象類和介面

  抽象類:使用abstract修飾的類稱為抽象類。

  來源:在我看來,抽象類的來源是值得仔細琢磨一下,有利於加深理解。現實生活中存在很多這樣的問題,也就是我們知道這一類事物都會做這個動作(方法),但是並不知道它如何去做,比如我們都知道動物為動,但是每個動物你不知道它如何去動。這個時候定義這個Animal類時,就需要一個move方法,只有方法頭(描述會做什麼事情),沒有方法體(描述如何去做這件事情),那麼這個方法比較特殊,我們就標記為抽象方法,使用abstract修飾。

  那麼Animal類中有了抽象方法,假如你實例化了Animal類,當你調用move方法時,會出現什麼樣的問題呢?未知,因為它並沒有描述如何去做。所以為了避免出現這種未知的情況,比如把Animal類定義為抽象類,顯著特點就是不能實例化。一個不能實例化的類,他的非靜態成員是不可被調用的,那麼這樣的類存在的意義在於什麼呢?

  所以總結:抽象類存在的意義在於被繼承。抽象類是為了抽象方法而存在的,有構造方法卻不能被實例化。語法上java和c#在這方面是一樣的,不再細說。

  介面:制定的一組規則和規範,讓實現類都滿足這個規則和規範,在實際應用中能很大程式增加程式的靈活性。面向介面編程,我的理解也不是特別深,也不是我一兩句可以講清楚。有高人可以在後面貼貼自己的心得,學習學習。

  區別:C#中,實現類如果沒有實現介面中所有的方法,則比如把自己定義為抽象類並且把未實現的方法重新抄寫一遍定義為抽象方法。

  總結

  一直以來是做java開發的,教學的需要才學習c#,有相通之處,學起來很快。這裡僅僅關註語法,對於大牛們都在搞協議,搞底層,是看不上這個的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分頁和排序,應該是軟體開發中,需要必知必會的技能了,對於分頁,網上很多教程,當然,別人終究是別人的,只有自己理解,會了,並且吸收之後,再用自己的語言,傳授出來,這才是硬道理。好了,廢話說多了。現在我們進入正題: 這裡,我打算使用EF Code-First方式分頁控制項就是用PagedList.MVC, ...
  • 隨著V5框架使用者的快速增加,終於促使我開始對整個框架編寫完整的Demo。上周大概花了一星期的時間,每天寫到夜裡3點半,終完成了框架所有功能的Demo。同時,按V5框架名稱空間的順序,對每個類的使用,補充相應的文章介紹,以漏補缺。 ...
  • 昨天《怎樣操作WebAPI介面(顯示數據)》http://www.cnblogs.com/insus/p/5670401.html既有使用jQuery,也有使作HttpClient來從資料庫獲取數據,並顯示在ASP.NET MVC的視圖中。今天Insus.NET想把例子全完成,就是把其餘的添加,更新 ...
  • 最近跟著師父學習軟體,因為軟體比較複雜,所以設計到判斷某個窗體是否打開了,如果打開了,進行某種操作,如果沒有打開,又進行另一種操作。 雖然不難,但是記一下總是好的。 ...
  • 什麼是Moq Moq是一個框架,一個可以模擬對象的框架,比如在不實現介面的情況下獲得介面的對象,這個介面的所有行為都可以用代碼控制 快速開始 被模擬的可以是介面和類,類不能是密封類,只有類中的虛函數能被模擬 先寫一個介面,下麵例子大部分用這個介面,但不全用這個介面 當不用 時候 Throws Moc ...
  • 摘要: Web.config的讀取 對於Web.config的讀取大家都很屬性了。平時我們用得比較多的就是appSettings節點下配置。如: 我們對應的代碼是: 是的,很簡單、很方便、很清晰。可以總感覺缺少那麼一點“面向對象”的感覺。少還無所謂,如果幾十個上百個呢?我們是不是可以考慮分類定義,如... ...
  • 現象:panel1和panel2或更多panel,疊放在一起,panel和panel2是同一層次的。panel1和panel2切換時只能顯示一個panel,如何切換呢? ...
  • 昨天看了一天的ajax,今天又看了兩個小時,終於弄出來個門道,其實ajax不是難,不是枯燥,而是自己不會用,這是根本所在 下麵分享學習經驗,以下是我程式代碼的下載地址:http://vdisk.weibo.com/s/BQ2aD 或者這個地址 http://download.csdn.net/det ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...