第三講面向?qū)ο缶幊蘝第1頁
第三講面向?qū)ο缶幊蘝第2頁
第三講面向?qū)ο缶幊蘝第3頁
第三講面向?qū)ο缶幊蘝第4頁
第三講面向?qū)ο缶幊蘝第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

面向?qū)ο缶幊瘫菊聝?nèi)容編程語言的發(fā)展面向?qū)ο蟮脑O(shè)計(jì)思想對象和類的概念類之間的關(guān)系對象和引用Java類的定義構(gòu)造函數(shù)對象的創(chuàng)建和使用This關(guān)鍵字Static關(guān)鍵字Package和import語句訪問控制類的繼承方法的重寫Final關(guān)鍵字Object類對象轉(zhuǎn)型多態(tài)抽象類接口編程語言的發(fā)展機(jī)器語言匯編語言高級語言面向?qū)ο蟮恼Z言語言朝著人更加能夠容易的方向發(fā)展面向過程的設(shè)計(jì)思想和面向?qū)ο蟮脑O(shè)計(jì)思想我要去北京面向過程我開車,我掛檔,我踩油門,我過河北,我過。。。面向?qū)ο笪颐钴嚾ケ本┸囋趺慈ゲ魂P(guān)我的事信息封裝在車這個(gè)類的內(nèi)部我不去去了解整個(gè)開動(dòng)的過程面向?qū)ο蟮脑O(shè)計(jì)思想從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類的自然思維方式。對象和類的概念對象用計(jì)算機(jī)語言對問題域中事物的描述,對象通過“屬性(attribute)”和方法(method)來分別對應(yīng)事物所具有的靜態(tài)屬性和動(dòng)態(tài)屬性。類是用于同一類的對象的一個(gè)抽象概念,類中定義了這一類所具有的靜態(tài)和動(dòng)態(tài)的屬性類可以看成一類對象的模板,對象可以看成該類的一個(gè)具體實(shí)例類之間的關(guān)系之關(guān)聯(lián)關(guān)系類之間的關(guān)系繼承關(guān)系Xx是一種xx聚合關(guān)系(整體和部分)Xx是xx的一部分實(shí)現(xiàn)關(guān)系抽象下面的類和對象某航空公司的訂票系統(tǒng)Java與面向?qū)ο髮ο笫莏ava程序的核心,在java程序中“萬事萬物皆對象”對象可以看成是靜態(tài)屬性(成員變量)和動(dòng)態(tài)屬性(方法)得封裝體類是用來創(chuàng)建同一類型的對象的模板,在一個(gè)類中定義了該類對象所應(yīng)具有的成員變量以及方法Jdk提供了很多類供編程人員使用,編程人員也可以定義自己的類成員變量=屬性,方法=函數(shù)為什么用對象?面向?qū)ο蟾尤菀资刮覀冞_(dá)到這些年苦苦追求的境界Reusable(復(fù)用),extensibility(可擴(kuò)展性)維護(hù),替換更加方便Java類的定義classPerson{//成員變量

privateintid;

privateintage=20;

//方法定義

publicintgetAge(){returnage;}publicvoidsetAge(inti){age=i;}publicintgetId(){returnid;}

成員變量成員變量可以是java語言中任何一種數(shù)據(jù)類型在定義成員變量時(shí)可以對其初始化,如果不對其初始化,java使用默認(rèn)的對其初始化成員變量的作用范圍為整個(gè)類體Java面向?qū)ο蠡靖拍睢肑ava語言除基本類型之外的變量類型都稱之為引用類型Java中得對象是通過引用對其操作的Strings;s=newString(“hellojava!”)對象的創(chuàng)建和使用必須使用new關(guān)鍵字創(chuàng)建對象使用對象(引用).成員變量或引用對象的成員變量適用對象(引用).方法(參數(shù)列表)來調(diào)用對象的方法同一類的每個(gè)對象有不同的成員變量存儲(chǔ)空間同一類的每個(gè)對象共享該類的方法非靜態(tài)方法是針對每個(gè)對象進(jìn)行調(diào)用構(gòu)造方法(構(gòu)造函數(shù))使用new+構(gòu)造方法創(chuàng)建一個(gè)新的對象構(gòu)造函數(shù)定義在java類中得一個(gè)用來初始化對象的函數(shù)構(gòu)造函數(shù)與類同名且沒有返回值例如person的構(gòu)造函數(shù):構(gòu)造函數(shù)當(dāng)沒有指定構(gòu)造函數(shù)時(shí),編譯器為類自動(dòng)添加形如類名(){}的構(gòu)造函數(shù)ClassPoint{ publicintx; publicinty;}

…… Pointp=newPoint();

……系統(tǒng)自動(dòng)添加構(gòu)造方法,Point(){};publicclassPerson{ intid; intage=20; Person(inti,intj){ id=i; age=j; }publicstaticvoidmain(Stringard[]){ Persontom=newPerson(1,25); pointp=newpoint();}}classpoint{ intx; inty;}Person.java如果Person()前不小心加上voidpublicclassPerson{ intid; intage=20; voidPerson(inti,intj){ id=i; age=j; }publicstaticvoidmain(Stringard[]){

Persontom=newPerson(1,25); pointp=newpoint();}}classpoint{ intx; inty;}Person.javapublicclassPerson{ intid; intage=20; voidPerson(inti,intj){ id=i; age=j; }publicstaticvoidmain(Stringard[]){

Persontom=newPerson();tom.Person(1,25); pointp=newpoint();}}classpoint{ intx; inty;}不是構(gòu)造方法了,只是普通的方法對象調(diào)用約定俗成的命名規(guī)則類名的首字母大寫變量名和方法名的首字母小寫運(yùn)用駝峰標(biāo)識HelloJava練習(xí)定義一個(gè)“點(diǎn)”(Point)類用來表示三維空間中得點(diǎn)(有三個(gè)坐標(biāo))。要求如下:可以生成具有特定坐標(biāo)的點(diǎn)對象提供可以設(shè)置三個(gè)坐標(biāo)的方法提供可以計(jì)算該“點(diǎn)”據(jù)原點(diǎn)距離平方的方法編寫程序驗(yàn)證上述三條TestPoint.java方法的重載方法的重載指一個(gè)類中可以有相同的名字,但參數(shù)不同的多個(gè)方法。調(diào)用時(shí),會(huì)根據(jù)不同的參數(shù)表選擇對應(yīng)的方法。

voidinfo(){ System.out.println(“aaa”);}voidinfo(Stringt){System.out.println(“ss”);}voidinfo(inti){System.out.println(“123”);}參數(shù)個(gè)數(shù)或者是參數(shù)類型不一樣定義一個(gè)函數(shù),分別int,float,double類型數(shù)據(jù)兩者取大值TestOverload.java如果將文件改為:publicclassTestOverload{ voidmax(inta,intb){ System.out.println(a>b?a:b); } voidmax(inta,floatb){ return(a>b?a:b); } voidmax(doublea,doubleb){ System.out.println(a>b?a:b); } publicstaticvoidmain(Stringagrs[]){ TestOverloadt=newTestOverload(); t.max(1.0,2.0); t.max(1,2); }}如果將文件改為:publicclassTestOverload{ voidmax(inta,intb){ System.out.println(a>b?a:b); } intmax(inta,intb){ return(a>b?a:b); } voidmax(doublea,doubleb){ System.out.println(a>b?a:b); } publicstaticvoidmain(Stringagrs[]){ TestOverloadt=newTestOverload(); t.max(1.0,2.0); t.max(1,2); }}重載?重復(fù)定義!構(gòu)造方法的重載與普通方法一樣,構(gòu)造方法也可以重載例如:Person(){}Person(inti)

{}Person(inti,intj){}this關(guān)鍵字當(dāng)前對象當(dāng)前對象指調(diào)用類中方法或?qū)傩缘哪莻€(gè)對象Person.javaclassPerson{ privateStringname; privateintage; Person(Stringname,intage){ name=name; age=age; } voidtalk(){ System.out.println("我是"+name",年齡是:"+age); } publicstaticvoidmain(Stringage[]){ Personp=newPerson("John",23); p.talk(); }}name?age?Person.javaclassPerson{ privateStringname; privateintage; Person(Stringname,intage){ =name; this.age=age; } voidtalk(){ System.out.println("我是"+name",年齡是:"+age); } publicstaticvoidmain(Stringage[]){ Personp=newPerson("John",23); p.talk(); }}this關(guān)鍵字在類的方法定義中使用的this關(guān)鍵字代表該方法的對象的引用當(dāng)必須指出當(dāng)前使用方法的對象是誰時(shí)要用this有時(shí)使用this可以處理方法中成員變量和參數(shù)重名的情況this可以看做是一個(gè)變量,它的值是當(dāng)前對象的引用testthis.javapublicclasstestthis{ inti=0; testthis(inti){ this.i=i; } testthisincreament(){ i++; returnthis; } voidprint(){ System.out.println("i="+i); } publicstaticvoidmain(Stringagrs[]){ testthist=newtestthis(100); t.increament().increament().print(); }}this調(diào)用構(gòu)造方法在程序中想用某一構(gòu)造方法調(diào)用另一構(gòu)造方法,可以用this實(shí)現(xiàn)this();Person.javaPerson.javapublicclassPerson1{ Stringname; intage; Person1(){ System.out.println("1PersonJava!"); } Person1(Stringname,intage){ this(); =name; this.age=age; System.out.println("2PersonJava!"); } publicstaticvoidmain(Stringargs[]){ newPerson1("John",18); }}匿名對象Person.javapublicclassPerson1{ Stringname; intage; Person1(){ System.out.println("1PersonJava!"); } Person1(Stringname,intage){ =name; this.age=age;this(); System.out.println("2PersonJava!"); } publicstaticvoidmain(Stringargs[]){ newPerson1("John",18); }}匿名對象this()調(diào)用構(gòu)造方法必須放在首行static關(guān)鍵字在程序中如果用static聲明變量的話,則此變量稱為靜態(tài)變量。那么什么是靜態(tài)變量?使用靜態(tài)變量又有什么好處呢?Person2.javaPerson2.javaclassPerson2{ Stringname; intage; Stringcity; Person2(Stringname,intage,Stringcity){ =name; this.age=age; this.city=city; } voidtalk(){ System.out.println("我是"+name+",年齡"+age+"城市:"+city); } publicstaticvoidmain(Stringargs[]){ Person2p1=newPerson2("張三",18,"China"); Person2p2=newPerson2("李斯",20,"China"); Person2p3=newPerson2("王立",21,"China"); p1.talk(); p2.talk(); p3.talk(); }}如果想把城市都改成“美國”Person22.javaclassPerson22{ Stringname; intage; staticStringcity; Person22(Stringname,intage,Stringcity){ =name; this.age=age; this.city=city; } voidtalk(){ System.out.println("我是"+name+",年齡"+age+"城市:"+city); } publicstaticvoidmain(Stringargs[]){ Person22p1=newPerson22("張三",18,"China"); Person22p2=newPerson22("李斯",20,"China"); Person22p3=newPerson22("王立",21,"China"); System.out.println("修改前的信息:"); p1.talk(); p2.talk(); p3.talk(); p1.city="美國"; System.out.println("修改后的信息:"); p1.talk(); p2.talk(); p3.talk(); }}static聲明的屬性是所有對象共享的。static關(guān)鍵字用static方式聲明的屬性,也可以用類名直接訪問Person.city=“美國”;靜態(tài)方法static既可以在聲明變量時(shí)使用,也可以用其來聲明方法,用它聲明的方法有時(shí)也被稱為“類方法”static關(guān)鍵字注意:靜態(tài)方法中調(diào)用靜態(tài)變量,不可以調(diào)用非靜態(tài)變量非靜態(tài)方法中既可以調(diào)用靜態(tài)變量也可以調(diào)用非靜態(tài)變量static關(guān)鍵字在類中static聲明的成員變量為靜態(tài)成員變量。它為該類的公用變量,在第一次使用時(shí)被初始化,對于該類的所有對象來說,static成員變量只有一份。用static聲明的方法為靜態(tài)方法,在調(diào)用該方法時(shí),不會(huì)將對象的引用傳遞給它,所以在static方法中不可訪問非static的成員靜態(tài)方法不再是針對于某個(gè)對象調(diào)用,所以不能訪問非靜態(tài)成員可以通過對象引用或類名(不需要實(shí)例化)訪問靜態(tài)成員package和import為了便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問題,java引入包(package)機(jī)制,提供類的多重命名空間。packagePackage語句作為java源文件的第一條語句,,指明該文件中定義的類所在的包,(若缺省該語句,則指定為無名包)。格式為:Packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對應(yīng)于文件系統(tǒng)的目錄管理。Package語句中用.來指明包(目錄)的層次,例如使用語句Packagecom.sxt則該文件中所有的類位于.\com\sxt目錄下Cat.javaDog.javaimportimportcom.sxt(包所在的路徑)Dog.javapackage和import總結(jié)如果想將一個(gè)類放入包中,在這個(gè)類源文件第一句話寫package必須保證該類的class文件位于正確的目錄下該類的源碼可能會(huì)產(chǎn)生影響刪除或轉(zhuǎn)移到另外的目錄另外的類想訪問的話:寫全名引入.具體類名訪問位于同一個(gè)包中的類不需要引入必須class文件的最上層包得目錄位于classpath下執(zhí)行一個(gè)類需要寫包的全名類的繼承現(xiàn)在假設(shè)有一個(gè)Person類,里面有name與age兩個(gè)屬性,而另外一個(gè)Student類,需要有name、age、school三個(gè)屬性,如下圖所示,從這里可以發(fā)現(xiàn)Person中已經(jīng)存在有name和age兩個(gè)屬性,所以不希望在Student類中再重新聲明這兩個(gè)屬性,這個(gè)時(shí)候就需要考慮是不是可以將Person類中的內(nèi)容繼續(xù)保留到Student類中類的繼承類的繼承Java只支持單繼承,不允許多繼承一個(gè)子類只能有一個(gè)基類,一個(gè)基類可以派生出多個(gè)子類TestPerson1_1.java父類和子類繼承圖super關(guān)鍵字完成子類調(diào)用父類中的內(nèi)容,也就是調(diào)用父類中的屬性或方法。Super1_1.java用super調(diào)用父類中的構(gòu)造方法,只能放在程序的第一行。super關(guān)鍵字不僅可以調(diào)用父類中的構(gòu)造方法,也可以調(diào)用父類中的屬性或方法,Super1_2.javasuper和this比較訪問控制Java權(quán)限修飾符publicprotectedprivate置于類的成員定義前,用來限定其他對象對該類對象成員的訪問權(quán)限對于class的權(quán)限修飾只可以用public和defaultpublic類可以在任意地方被訪問default類只可以被同一個(gè)包內(nèi)部的類訪問TestAccess.javaprivateTestPri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論