




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、誠信、創(chuàng)新、開放、合作面向對象主要針對面向過程O 面向過程的基本單元是函數(shù)。什么是對象:EVERYTHING IS OB JECT (萬物皆對象) 所有的事物都有兩個方面:有什么(屬性人用來描述對象。能夠做什么(方法人告訴外界對象有那些功能。后者以前者為基礎。大的對象的屬性也可以是一個對象。為什么要使用面向對象:首先,面向對象符合人類看待事物的一般規(guī)律。對象的方法的實現(xiàn)細節(jié)是屏蔽的,只有對象方法的實現(xiàn)者了解細節(jié)。 方法的定義非常重要方法有參數(shù),也可能有返回值。注意區(qū)分:對象(本身)、對象的實現(xiàn)者、對象的調用者。 分析對象主要從方法開始。我們通過類來看待對象,類是對象的抽象。其次,采用面向對象方
2、法可以使系統(tǒng)各部分各司其職、各盡所能。對象之間的耦合性一定要低(比如不同硬盤和不同主板之間的關系)。這樣才能使每個對象本身做成最 好的。對于對彖的要求:高內(nèi)聚、低耦合,這樣容易拼裝成為一個系統(tǒng)。 實現(xiàn)高內(nèi)聚就是要最大限度低提高復用性(復用性好是因為高內(nèi)聚)??蓮陀眯允荗OP的基礎。比較面向過程的思想和面向對象的思想: 面向過程的思想:由過程、步驟、函數(shù)組成,以過程為核心;面向對象的思想:以對象為中心,先開發(fā)類,得到對象,通過對象之間相互通信實現(xiàn)功能。 面向過程是先有算法,后有數(shù)據(jù)結構。面向對象是先有數(shù)據(jù)結構,然后再有算法。在用面向對象思想開發(fā)的過程中,可以復用對象就進行復用,如無法進行復用則開
3、發(fā)新的對象。開發(fā)過程是用對個簡單的對象的多個簡單的方法,來實現(xiàn)復雜的功能。從語法上來看,一個類是一個新的數(shù)據(jù)類型。在面向對象編程中,除了簡單數(shù)據(jù)類型,就是對象類型。定義類的格式:class Student代碼注意類名中單詞的首字母大寫。實例變量:定義在類中但在任何方法之外。(New出來的均有初值)局部變量:定義在方法之中的變量。局部變量要先賦值,再進行運算,而實例變量均已經(jīng)賦初值。這是局部變量和實例變量的一大區(qū)別。實例變量的對象賦值為nulL局部變量不允許范圍內(nèi)定義兩個同名變量。實例變量的作用域在本類中完全有效,當被其他的類調用的 時候也可能有效。實例變量和局部變量允許命名沖突.調用過程中 可
4、能出現(xiàn)的例外 throw Excepion方法體書寫方法的格式:修飾符返回值方法名public int/void addNumber(參數(shù))例:public int addNumber(int a,int b)注:方法名中的參數(shù)int a,int b為局部變量類方法中的一類特殊方法:構造方法。構造方法是當用類生成對象時,系統(tǒng)在生成對象的過程中利用的方法。注意:構造方法在生成對象的時候會被調用,但并不是構造方法生成了對象。構造方法沒有返回值。格式為:public方法名。構造方法的方法名與類名相同。構造方法是在對象生成的過程中自動調用,不可能利用指令去調用。在一個對象的生成周期中構造方法只用一次,
5、一旦這個對象生成,那么這個構造方法失效。用類來生成對象的語句:Student s=new Student()o第一個Student 示這是用Student類進行定義。Studen()表示調用一個無參數(shù)的構造方法。 如果()中有參數(shù),則系統(tǒng)構造對象的過程中調用有參的方法。此時S稱為一個對象變量。Student s的存儲區(qū)域存放的是地址:一個對象在硬盤上占有一個連續(xù)地址,首地址賦予s空間。S稱為對象Student的引用。注意:在對象變量中存放的是引用(地址);在簡單變量中存放的是數(shù)值。可以構造多個構造方法,但多個構造方法的參數(shù)表一定不同,參數(shù)順序不同即屬于不同的構造方法: public stude
6、nt(string name,int a)public student(int a,string name)為兩個不同的構造方法。如果我們未給系統(tǒng)提供一個構造方法,那么系統(tǒng)會自動提供一個為空的構造方法。練習:寫一個類,定義一個對象,定義兩個構造方法:一個有參,一個無參。(編寫一個程序驗證對象的傳遞的值為地址)注意下面這種形式:static void changename(student stu)stu.setName LUCY”注意生成新的對象與舊對象指向無關,生成新對象生命消亡與舊對象無關。面向對象方法的重載(overloading)和覆蓋(overriding)在有些JAVA書籍中將ove
7、rriding稱為重載,overloading稱為過載。Overloading在一個類中可以定義多個同名方法,各個方法的參數(shù)表一定不同。但修飾詞可能相同,返回值也可能相同。在程序的編譯過程中根據(jù)變量類型來找相應的方法。因此也有人認為overloading是編譯時的多態(tài), 以后我們還會學到運行時多態(tài)。為什么會存在overloading技術呢?作為應對方法的細節(jié)。 利用類型的差異來影響對方法的調用.吃()可以分為吃肉,吃菜,吃藥,在一個類中可以定義多個吃方法.構造方法也可以實現(xiàn)overload ingo例:public void teach();public void teach(int a);p
8、ublic void teach(String a)為三種不同的方法。Overloading方法是從低向高轉。Bytehortfloatintlong oubleo在構造方法中,this表示本類的其他構造方法: student();student(string n)this();表示調用 student()如果調用 student(int a)則為 this(int a)特別注意:用this調用其他構造方法時,this必須為第一條語句,然后才是其他語句。This表示當前對彖。Public void printNum()Int number=40;System.out.println(this.
9、number);此時打印的是實例變量,而非局部變量,即定義在類中而非方法中的變量。This.number表示實例變量。誰調用this.nuniber那么誰即為當前(this)對象的number方法。封裝:使對象的屬性盡可能私有,對象的方法盡可能的公開。用private表示此成員屬性為該類的私有 屬性。Fublii表示該屬性(方法)公開;Private表示該屬性(方法)為只有本類內(nèi)部可以訪問(類內(nèi)部可見)。(想用private還要用set和get方法供其他方法調用,這樣可以保證對屬性的訪問方式統(tǒng)一,并且便于 維護訪問權限以及屬性數(shù)據(jù)合法性)如果沒有特殊情況,屬性一定私有,方法該公開的公開。如果不
10、指明誰調用方法,則默認為thiSo區(qū)分實例變量和局部變量時一定要寫this。11.29繼承:父類(SuperClass)和子類(SonClass)o父類的非私有化屬性和方法可以默認繼承到子類。Class Son extends FatherJ而如果父類中的私有方法被子類調用的話,則編譯報錯。父類的構造方法子類不可以繼承,更不存在覆蓋的問題。(非構造方法可以)如果子類訪問父類的構造方法,則在編譯的時候提示訪問不到該方法。JAVA中不允許多繼承,一個類有且只有一個父類(單繼承)。JAVA的數(shù)據(jù)結構為樹型結構,而非網(wǎng)狀。(JAVA通過接口和內(nèi)部類實現(xiàn)多繼承)方法的覆蓋(overriding)方法的重
11、載并不一定是在一個類中:子類可以從父類繼承一個方法,也可以定義一個同名異參的方法, 也稱為 overloading。當子類從父類繼承一個無參方法,而又定義了一個同樣的無參方法,則子類新寫的方法覆蓋父類的方法, 稱為覆蓋。(注意返回值類型也必須相同,否則編譯出錯如果方法不同,則成重載。對于方法的修飾詞,子類方法要比父類的方法范圍更加的寬泛。父類為public,那么子類為private則出現(xiàn)錯誤。之所以構造方法先運行父類再運行子類是因為構造方法是無法覆蓋的。以下范圍依次由嚴到寬:private :本類訪問;default :表示默認,不僅本類訪問,而且是同包可見。Protected:同包可見+不同
12、包的子類可見Public :表示所有的地方均可見。當構造一個對象的時候,系統(tǒng)先構造父類對象,再構造子類對象。構造一個對象的順序:(注意:構造父類對象的時候也是這幾步) 遞歸地構造父類對象; 順序地調用本類成員屬性賦初值語句; 本類的構造方法。Super()表示調用父類的構造方法。Super()也和this 樣必須放在第一行。This()用于調用本類的構造方法。如果沒有定義構造方法,那么就會調用父類的無參構造方法,即super().要養(yǎng)成良好的編程習慣:就是要加上默認的父類無參的構造方法。思考:可是如果我們沒有定義無參的構造方法,而在程序中構造了有參的構造方法,那么如果方法中沒 有參數(shù),那么系統(tǒng)
13、還會調用有參的構造方法么?應該不會.多態(tài):多態(tài)指的是編譯時類型變化,而運行時類型不變。多態(tài)分兩種: 編譯時多態(tài):編譯時動態(tài)重載; 運行時多態(tài):指一個對象可以具有多個類型。對象是客觀的,人對對象的認識是主觀的。例:Animal a=new Dog():査看格式名稱;Dog d=(Dog)ao聲明父類來引用子類。(思考上面的格式)運行時多態(tài)的三原則:(應用時為覆蓋)K 對象不變;(改變的是主觀認識)2、對于對彖的調用只能限于編譯時類型的方法,如調用運行時類型方法報錯。在上面的例子中:Animal a=new Dog();對象a的編譯時類型為Animal,運行時類型為dog。 注意:編譯時類型一定要
14、為運行時類型的父類(或者同類型)。對于語句:Dog d=(Dog)ao將d強制聲明為a類型,此時d為Dog (),此時d就可以調用運行時類型。 注意:a和d指向同一對象。3、在程序的運行時,動態(tài)類型判定運行時調用運行時類型,即它調用覆蓋后的方法。關系運算符:instanceofa instanceof Animal;(這個式子的結果是一個布爾表達式)a為對象變量,Animal是類名。上面語句是判定a是否可以貼Animal標簽。如果可以貼則返回true,否則返回false。 在上面的題目中:a instanceof Animal返回True,a instanceof Dog 也返回 True,i
15、nstanceof用于判定是否將前面的對象變量賦值后邊的類名。 Instanceof 一般用于在強制類型轉換之前判定變量是否可以強制轉換。如果 Animal a=new Animal();Dog d=Dog()a;此時編譯無誤,但運行則會報錯。Animal a=new Dog()相當于下面語句的功能:Animal a=getAnimal();Public static Animal.getAnimal;Return new Dog();封裝、繼承、多態(tài)為面向對象的三大基石(特性)。運行時的動態(tài)類型判定針對的是方法。運行程序訪問的屬性仍為編譯時屬性。Overloading針對的是編譯時類型,不存
16、在運行時的多態(tài)。習題:建立一個shape類,有circle和rect子類。Shape 類有 zhouchangO和 area()兩種方法。(正方形)squ為rect子類,rect有cha()用于比較長寬的差。覆蓋時考慮子類的private及父類的public (考慮多態(tài)),之所以這樣是避免調用A時出現(xiàn)實際調用B 的情況。而出現(xiàn)錯誤.11.29下午講的是教程上的Module6Module6-7包括:面向對象高級、內(nèi)部類、集合、反射(暫時不講)、例外。面向對象高級、集合和例外都是面向對象的核心內(nèi)容。面向對象高級:修飾符:static:可修飾變量(屬性);可修飾方法;可修飾代碼塊。Static in
17、t data語句說明data為類變量,為一個類的共享變量,屬于整個類。 Int data為實例變量。例:static int data;ml.data=O;ml.data+的結果為1,此時m2.data的結果也為1。Static定義的是一塊為整個類共有的一塊存儲區(qū)域,其發(fā)生變化時訪問到的數(shù)據(jù)都時經(jīng)過變化的。其變量可以通過類名去訪問:類名變量名。與通過訪問對象的編譯時類型訪問類變量為等價的。Public static void printData()表明此類方法為類方法(靜態(tài)方法)靜態(tài)方法不需要有對象,可以使用類名調用。靜態(tài)方法中不允許訪問類的非靜態(tài)成員,包括成員的變量和方法,因為此時是通過類調
18、用的,沒有對象 的概念。This.data是不可用的。一般情況下,主方法是靜態(tài)方法,所以可調用靜態(tài)方法,主方法為靜態(tài)方法是因為它是整個軟件系統(tǒng)的 入口,而進入入口時系統(tǒng)中沒有任何對象,只能使用類調用.覆蓋不適用于靜態(tài)方法。靜態(tài)方法不可被覆蓋。(允許在子類中定義同名靜態(tài)方法,但是沒有多態(tài),嚴格的講,方法間沒有多態(tài) 就不能稱為覆蓋)當static修飾代碼塊時(注:此代碼塊要在此類的任何一個方法之外),那么這個代碼塊在代碼被裝載進 虛擬機生成對象的時候可被裝載一次,以后再也不執(zhí)行了.一般靜態(tài)代碼塊被用來初始化靜態(tài)成員.Static通常用于Singleton模式開發(fā):Singleton是一種設計模式,
19、高于語法,可以保證一個類在整個系統(tǒng)中僅有一個對象。11.30fhud可以修飾類、屬性.方法。當用final修飾類的時候,此類不可被繼承,即血川類沒有子類。這樣可以用final保證用戶調用時動作 的一致性,可以防止子類覆蓋情況的發(fā)生。當利用final修飾一個屬性(變量)的時候,此時的屬性成為常量。JAVA利用final定義常量(注意在JAVA命名規(guī)范中常量需要全部字母都大寫): Final int AGE=10;常量的地址不可改變,但在地址中保存的值(即對象的屬性)是可以改變的。Final可以配合static使用。?Static final int age=10;定格式)。在JAVA中利用pub
20、lic static final的組合方式對常量進行標識對于在構造方法中利用final進行賦值的時候,此時在構造之前系統(tǒng)設置的默認值相對于構造方法失效。常量(這里的常量指的是實例常量:即成員變量)賦值: 在初始化的時候通過顯式聲明賦值。Final int x=3; 在構造的時候賦值局部變量可以隨時賦值。利用final定義方法:這樣的方法為一個不可覆蓋的方法.Public final void print();為了保證方法的一致性(即不被改變),可將方法用final定義。如果在父類中有final定義的方法,那么在子類中繼承同一個方法。如果一個方法前有修飾詞private或static,則系統(tǒng)會自
21、動在前面加上final即private和static 方法默認均為final方法。注:final并不涉及繼承,繼承取決于類的修飾符是否為private、defaults protected還是public 也就是說,是否繼承取決于這個方法對于子類是否可見。Abstract (抽象)可以修飾類、方法如果將一個類設置為abstract,則此類必須被繼承使用。此類不可生成對象,必須被繼承使用。Abstract可以將子類的共性最大限度的抽取出來,放在父類中,以提高程序的簡潔性。Abstract雖然不能生成對象,但是可以聲明,作為編譯時類型,但不能作為運行時類型。Final和abstract永遠不會同時
22、出現(xiàn)。當abstract用于修飾方法時,此時該方法為抽象方法,此時方法不需要實現(xiàn),實現(xiàn)留給子類覆蓋,子 類覆蓋該方法之后方法才能夠生效。注意比較:private void print () ;此語句表示方法的空實現(xiàn)。Abstract void print ();此語句表示方法的抽象,無實現(xiàn)。如果一個類中有一個抽象方法,那么這個類一定為一個抽象類。反之,如杲一個類為抽象類,那么其中可能有非抽象的方法。如果讓一個非抽象類繼承一個含抽象方法的抽象類,則編譯時會發(fā)生錯誤。因為當一個非抽象類繼承一 個抽象方法的時候,本著只有一個類中有一個抽象方法,那么這個類必須為抽象類的原則。這個類必須為抽象類,這與此
23、類為非抽象沖突,所以報錯。所以子類的方法必須覆蓋父類的抽象方法。方法才能夠起作用。只有將理論被熟練運用在實際的程序設計的過程中之后,才能說理論被完全掌握!為了實現(xiàn)多態(tài),那么父類必須有定義。而父類并不實現(xiàn),留給子類去實現(xiàn)。此時可將父類定義成abstmct 類。如果沒有定義抽象的父類,那么編譯會出現(xiàn)錯誤。Abstract和static不能放在一起,否則便會出現(xiàn)錯誤。(這是因為static不可被覆蓋,而abstract為了生 效必須被覆蓋。) 例:(本例已存在CODINGabstractTestCIass.java 文件中) public class TestClassJpublic static
24、void main(String args)SuperClass sc=new SubClass();Sc.print();Abstract class SuperClassAbstract void print();class SubClass extends SuperClass()void print()SystemoutpFintln(pFint); 接口與類屬于同一層次,實際上,接口是一種特殊的抽象類。 如:JAVA的核心概念:接口(interface)interface IAIpublic interface:公開接口與類相似,一個文件只能有一個public接口,且與文件名相同。
25、在一個文件中不可同時定義一個public接口和一個public類。一個接口中,所有方法為公開、抽象方法;所有的屬性都是公開、靜態(tài)、常量。一個類實現(xiàn)一個接口的格式:class IAlniple implements IA;一個類實現(xiàn)接口,相當于它繼承一個抽象類。類必須實現(xiàn)接口中的方法,否則其為一抽象類。 實現(xiàn)中接口和類相同。接口中可不寫public,但在子類中實現(xiàn)接口的過程中public不可省。(如果剩去public則在編譯的時候提示出錯:對象無法從接口中實現(xiàn)方法。)注: 一個類除繼承另外一個類,還可以實現(xiàn)接口;class IAImpl extends java, util. Arrylist
26、implement IA繼承類實現(xiàn)接口這樣可以實現(xiàn)變相的多繼承。 一個類只能繼承另外一個類,但是它可以繼承多個接口,中間用“,”隔開。Imp1ernents IA, IB所謂實現(xiàn)一個接口,就是指實現(xiàn)接口中的方法。 接口和接口之間可以定義繼承關系,并且接口之間允許實現(xiàn)多繼承。例:interface IC extends IA, IB ;接口也可以用于定義對象IA I=new IAImpl ();實現(xiàn)的類從父類和接口繼承的都可做運行時類型。IAImple extends A imp1ement IA, IBIB I=new IAImple ():I instance of IAImple:I in
27、stance of A;I instance of IA;I instance of IB;返回的結果均為true.接口和多態(tài)都為JAVA技術的核心。接口往往被我們定義成一類XX的東西。接口實際上是定義一個規(guī)范、標準。 通過接口可以實現(xiàn)不同層次、不同體系對象的共同屬性;通過接 口實現(xiàn) write once as anywhere.以JAVA數(shù)據(jù)庫連接為例子:JDBC制定標準;數(shù)據(jù)廠商實現(xiàn)標準;用戶使用標準。接口通常用來屏蔽底層的差異。 接口也因為上述原因被用來保持架構的穩(wěn)定性。JAVA中有一個特殊的類:Objecto它是JAVA體系中所有類的父類(直接父類或者間接父類)。此類中的方法可以使所的
28、類均繼承。以下介紹的三種方法屬于Object:finalize方法:當一個對象被垃圾回收的時候調用的方法。toStringO:是利用字符串來表示對象。當我們直接打印定義的對象的時候,隱含的是打印toStringO返回值??梢酝ㄟ^子類作為一個toStringO來覆蓋父類的toStringO toStringO, equals(),還有 hashCode()HashSet底層用的也是數(shù)組。當向數(shù)組中利用add(Object o)添加對象的時候,系統(tǒng)先找對象的hashCode:int hc=o.hashCode();返回的 hashCode 為整數(shù)值。Int I=hc%n; (n為數(shù)組的長度),取得余數(shù)后,利用余數(shù)向數(shù)組中相應的位置添加數(shù)據(jù),以n為6為例, 如果1=0則放在數(shù)組a0位賢,如果1=1 .則放在數(shù)組al位置。如果equals()返回的值為true,貝lj說明 數(shù)據(jù)重復。如果equals()返回的值為fals則再找其他的位置進行比較。這樣的機制就導致兩
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 普定縣中醫(yī)醫(yī)院招聘筆試真題2024
- 活動總結范文2020社區(qū)活動總結
- 項目部二級安全教育內(nèi)容
- 湘藝版二年級下冊教案-第四課 排排坐
- 2025年抗滴蟲病藥項目合作計劃書
- 2025年雙頭應急燈合作協(xié)議書
- 2025年機器人及具有獨立功能專用機械項目建議書
- 多國教育資源協(xié)作的醫(yī)療應用案例研究
- 2025年虛擬演播室制作設備項目發(fā)展計劃
- 企業(yè)采購決策中的智慧供應鏈建設研究
- 2024年風機市場洞察報告
- 鍛壓設備安裝工程施工及驗收規(guī)范
- 磨煤機檢修培訓課件
- 瑞安市工業(yè)固廢與污泥無害化處置及資源化利用項目階段性竣工環(huán)境保護驗收報告
- 檢驗科對急診凝血標本質量不合格原因分析品管圈魚骨圖柏拉圖
- 中草藥的種植技術
- 關于中學生課余生活的調研報告
- 全國普通高等學校畢業(yè)生就業(yè)協(xié)議書
- 皖2015s209 混凝土砌塊式排水檢查井
- 2023火力發(fā)電廠熱工開關量和模擬量控制系統(tǒng)設計規(guī)程
- 史記《孔子世家》原文
評論
0/150
提交評論