Java面向對象編程

---------------------- android培訓java培訓、期待與您交流!

Java面向對象

面向對象的設計思想在考慮問題時,以具體的事物(對象)爲單位,考慮它的屬性(特徵)及動作(行爲),關注整體。

一.面向對象概念

對象:對象就是某個具體的事物,比如一個蘋果、一臺計算機都是一個對象。每個對象都是唯一的。對象可以是一個實物,也可以是一個概念;比如一個蘋果、一項政策。現實生活中萬事萬物皆對象,面向對象的設計思想(OOP)主要是模擬現實生活中的一個個對象來編程的。對象具有屬性和行爲。

抽象:所謂的抽象,即抽取,也叫提煉或歸納總結等。主要用來把客觀世界中真實存在的事物用編程語言描述出來。這也是理解面向對象編程思想的第一步。通過抽象將現實生活中的對象模擬或映射到計算機中。

:現實生活中任何實實在在的具體物體都叫對象,通過面向對象的抽取思想,根據很多實體的行爲特徵可以抽取出很多的對象,然後再通過歸納總結,將這些對象分門別類;類可以理解爲對事物的分類。類是構成Java面向對象編程的最小封裝單元。在Java中通過關鍵字class定義自定義的數據類型。Java中通過類來封裝現實生活中對象的各個信息。類可以封裝數據。

類和對象的關係:類是對象的類型,要創建對象就要先創建它的數據類型,即類。類描述了對象的屬性和行爲。類是對象的模板和圖紙。對象是類的一個實例,是一個實實在在的的個體。由對象可以抽取出類,類可以實例化成對象。

 

二,面向對象的特徵
1.
封裝

所謂封裝是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。封裝有兩層含義,其一是隱藏內部行爲,即隱藏內部方法,調用者只能看到對外提供的公共方法。其二是隱藏內部信息,即隱藏內部數據成員。現在都建議不要對外公開任何數據成員,即使是外部需要知道的數據成員,也只能通過函數獲取。

封裝的好處:封裝可以隔離變化、提高易用性、提高安全性、提高重用性。

封裝的原則:

將不需要對外提供的內容都隱藏起來。把屬性都隱藏,提供公共方法對其訪問


2.
繼承

繼承的概述:

多個類中存在相同屬性和行爲時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行爲,只要繼那個類即可。

多個類可以稱爲子類,單獨這個類稱爲父類或者超類。

子類可以直接訪問父類中的非私有的屬性和行爲。

通過 extends 關鍵字讓類與類之間產生繼承關係。

class SubDemo extends Demo{}

  繼承的好處:

繼承的出現提高了代碼的複用性。

繼承的出現讓類與類之間產生了關係,提供了多態的前提。

繼承的特點:

Java只支持單繼承,不支持多繼承。

一個類只能有一個父類,不可以有多個父類。

class SubDemo extends Demo{} //ok

class SubDemo extends Demo1,Demo2...//error

Java支持多層繼承(繼承體系)

class A{}

class B extends A{}

class C extends B{}

定義繼承需要注意:

不要僅爲了獲取其他類中某個功能而去繼承

類與類之間要有所屬( " is a " )關係,xx1xx2的一種。

繼承中的相關概念:

a.覆寫:

子類中出現與父類一模一樣的方法時,會出現覆蓋操作,也稱爲重寫或者複寫。

父類中的私有方法不可以被覆蓋。

在子類覆蓋方法中,繼續使用被覆蓋的方法可以通過super.函數名獲取。

覆蓋注意事項:

•    覆蓋時,子類方法權限一定要大於等於父類方法權限

•    靜態只能覆蓋靜態。

覆蓋的應用:

•    當子類需要父類的功能,而功能主體子類有自己特有內容時,可以復    寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容。

b.子類的實例化過程:

子類中所有的構造函數默認都會訪問父類中空參數的構造函數

因爲每一個構造函數的第一行都有一條默認的語句super();

子類會具備父類中的數據,所以要先明確父類是如何對這些數據初始化的。

當父類中沒有空參數的構造函數時,子類的構造函數必須通過this或者super語句指定要訪問的構造函數。


3.
多態

程序中體現:父類或者接口的引用指向或者接收自己的子類對象。

好處和作用:多態的存在提高了程序的擴展性和後期可維護性

前提:需要存在繼承或者實現關係

要有覆蓋操作

多態的特點:

a.    成員方法:

編譯時:要查看引用變量所屬的類中是否有所調用的成員。

在運行時:要查看對象所屬的類中是否有所調用的成員。

b.  成員變量 
只看引用變量所屬的類。

 

三,面向對象的優點

  
將一類客觀存在的事物抽象成一個類,其中包含了事物的特徵與行爲,然後根據類創建不同方法、屬性的對象,可以操作對象完成相應的工作,調用者只需調用它的方法,怎麼實現的根本不需要去了解,從而程序員就成爲了一個指揮者的角色,可以輕鬆的操作對象,需要哪類事物,就創建那種對象。


四,面向對象中的一些概念
1:)
成員變量:在類中直接定義的變量叫做成員變量,也可以叫做類的屬性!
2:)
局部變量:在一個方法中聲明的變量就是局部變量,它的生命週期是這個方法體內!
注意:如果在一個方法中的變量與類中的成員變量名相同時,默認先在此方法體中找,找到了就調用,找不到調用成員變量!
如果一定要調用類中的成員變量,可以是用this關鍵字進行調用!
3:)
對象的建立以及初始化過程
    
Person p = newPerson()

(1)Person.class文件加載進內存.

(2)在棧內存空間中開闢一個變量空間p

(3)在堆內存中給對象分配空間。

(4)給對象中的屬性進行默認初始化。

(5)給對象中的屬性進行顯示初始化。

(6)調用構造代碼塊對對象進行初始化。(執行類中的構造代碼塊,沒有就不執行)

(7)調用對應的構造函數進行對象初始化。對象初始化完畢。

(8)將對象的內存地址賦值給p變量,讓p變量指向該對象。


4:
)對象的生命週期
對象的聲明週期由關鍵字new開始,當沒有任何引用指向對象時,對象的生命週期結束,被銷燬!
5:)
匿名對象
當一個對象我們只是是用一次的時候,可以把這個對象聲明爲匿名對象,它沒有任何引用,通常作爲一個實參傳給方法!

6:) static 關鍵字
    用於修飾成員(成員變量和成員函數)

被修飾後的成員具備以下特點:

•    隨着類的加載而加載,生命週期最長。

•    優先於對象存在

•    被所有對象所共享

•    可以直接被類名調用

使用注意

•    靜態方法只能訪問靜態成員

•    靜態方法中不可以寫thissuper關鍵字

•    主函數是靜態的

什麼時候需要使用static修飾:

當類中的成員需要被所有對象共享時,用static修飾。不需要被共享時,就不用static修飾。

簡單說:共性用static修飾,特性不用static修飾。

7:)final可以用來修飾什麼呢?

(1)final可以用來修飾類:被fainl修飾的類不能被繼承。

(2)final可以用來修飾成員方法:被final修飾的成員方法不能被重寫。

(3)final可以用來修飾變量:被final修飾的變量爲常量,值不能被修改。

       常量的命名規範:要求大寫。

       final int PI = 3.14;

final難道必須聲明的時候就賦值。

      一般來說,是這樣的。但是特殊情況:在構造方法可以給final修飾的變量賦值。

 

五,抽象類和接口  

  

抽象類(abstract)

    (1)只抽取了很多類的方法的聲明,爲了保證不出問題,方法聲明用abstract修飾。

    (2)抽象類的特點

           A:一個類如果有了抽象方法,那麼這個類必須是抽象類。抽象類裏邊可以沒有抽象方法。

           B:抽象類是不能夠被實例化的。不能夠創建對象的。

           C:如果一個類繼承抽象類,那麼,它要麼實現抽象類中的所有抽象方法,

              要麼本身也是抽象類。

    (3)抽象類的成員特點:

           A:成員變量:子類可以直接繼承抽象類中的成員變量。(抽象類中的成員變量可以和以前是一樣的)

           B:成員方法:抽象類中分爲兩種方法,一種是抽象方法,這種方法在子類中必須要被實現。

                        一種是普通的方法。可以被子類直接繼承使用。

           C:構造方法:抽象類不能被實例化,那麼它有構造方法嗎?抽象類是class,那麼它就有構造方法。

                      它的構造方法有用嗎?有,爲了讓子類實例化的時候使用。

接口(interface)

    (1)接口的由來:當一個類中的方法都是抽象的時候,你沒必要定義爲抽象類,

                   定義爲接口就可以了。

    (2)解決了java中只能單繼承的問題。(對多繼承進行了優化)

           A:類與類:只能是單繼承。

           B:接口與接口:可以是單繼承,也可以是多繼承。

           C:類與接口:可以是單實現,也可以是多實現。

    (3)成員特點:

           A:只有成員變量和成員方法。

           B:成員變量默認修飾符 publicstatic final

                  **int x =20;

                  **其實是這樣的 public static final int x = 20;

           C:成員方法默認修飾符 publicabstract

                  **voidshow();

                  **其實是這樣的 public abstract void show();

           建議:自己手動加上修飾符。

    (4)接口特點:

           A:接口是對外暴露的規則

           B:接口是功能的擴展

           C:接口降低了程序的耦合性。

                  **內聚(自己實現功能的能力)

                  **高內聚,低耦合。

           舉例:主板和CPU,USB接口,電源插座。

           D:擴展說了下接口的理解

                  **狹義的理解就是java中的接口。

                  **廣義的理解就是:任何定義的規範都是接口。

    (5)接口和抽象類的區別:

           A:抽象類只能被單繼承;接口可以被多實現。

           B:抽象類中的成員:成員變量:可以是常量,也可以是變量。

                            成員方法:可以是抽象的,也可以是非抽象的。

                            構造方法:雖然不可以創建對象,但是可以給子類實例化用。

              接口中的成員:成員變量:只能是常量。默認修飾符 public static final

                          成員方法:只能是抽象的。默認修飾符 public abstract

           C:抽象類中定義的是體系結構中的共性的內容。

              接口中定義的是對象的擴展功能。

           D:抽象類被繼承表示的是:"is a"的關係。xxyy中的一種。

             接口被實現表示的是: "like a"的關係。xxyy中的一種。

 

---------------------- android培訓java培訓、期待與您交流! ----------------------詳細請查看:http://edu.csdn.net/heima
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章