作了幾年了開發一直沒有總結什麼,回到了家鄉的小城作了一名培訓班的教員,教授軟件開發的知識。細小的知識從頭細細嚼來,別有一番滋味。或是之前遺漏的太多,或是確實沒有系統的學習過,教學生的過程當中本身也對教材有了一遍系統深刻的學習。雖然教的和學的都很膚淺,可是爲了幫助學生們理解,而後本身也會思考爲何會這樣?這種來自於最基礎的思考,一直向上反饋,發現這種思考原來能夠令本身進步的很是快。雖然目前還在思考入門階段的問題,已經受益良多了。那麼若是把以前的開發中的問題都思考一遍,又能收穫多少能?寫寫博客吧,一直告訴學生們這是一個好的習慣,可本身卻歷來沒有身體力行。那麼,就從如今開始.. html
http://bbs.itheima.com/thread-23776-1-1.html?fstgj java
之前的學習網站,-全套java視頻教程,須要的本身看下,能夠去這個網站下載,下載視頻免費,不須要註冊和作什麼任務 編程
面向對象是一種開發思想,最應該記住的一句話是萬物皆對象。爲了讓程序更好的被理解和編寫,把現實生活中描述事物的方式和思路融合進入,就成了面向對象的思想。把生活中的事物融合進程序中那麼就須要描述,描述分爲特徵和行爲兩方面,而不一樣類別的對象特徵和行爲具備巨大的差別,爲了更好的制定描述每一類事物的方式,那麼提取來一個編程世界中的類的概念,等同於生活中的類型的概念,每一種事物都應該是有類型的。而後生活中的事物按不一樣的方面進行分類的話,能夠劃入不一樣的類別,全部編程中的類也是一個公說公有理,婆說婆有理的玩意,至關的抽象,具備至關的不肯定性和隨意性。 c#
類的構成: 安全
Java中的類,包含屬性和方法。屬性即類中的變量,可分靜態變量、實例變量(全局變量)、局部變量(存在於方法中,聲明週期僅限於該方法的調用階段) ide
C#中的類,包含字段、屬性和方法。字段對應java中的屬性,C#中的屬性對象java中的get和set訪問器,是對字段的封裝,方法同樣,都是描述行爲。 學習
類成員的調用: 網站
實例成員由對象調用。靜態成員由類調用。可是在java中靜態成員也能夠被實例調用,至關於班上的每個學生均可以任意的支配班費了,很很差的一個問題。C#在這方面嚴格限制了,靜態成員只能有類進行調用。 spa
封裝:爲了隱藏內部的實現細節,達到對數據安全性的保護和代碼重用的效果的一種手段。 orm
封裝無處不在,看似簡單卻可無限延伸。並無一個明確的關鍵字來表示封裝。既然是思想,是手段,全部在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#中,實現類若是沒有實現接口中全部的方法,則好比把本身定義爲抽象類而且把未實現的方法從新抄寫一遍定義爲抽象方法。