04面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階_第1頁
04面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階_第2頁
04面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階_第3頁
04面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階_第4頁
04面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、面向?qū)ο蟪绦蛟O(shè)計(jì)(上)ID:SCSJ001-Java Basic Syntax面向?qū)ο蟪绦蛟O(shè)計(jì)(上)類的繼承訪問控制(public/protected/private)方法覆蓋(重寫)重載2類的繼承面向?qū)ο笞钪匾奶攸c(diǎn)之一,就是可以實(shí)現(xiàn)對類的復(fù)用通過“繼承”一個(gè)現(xiàn)有的類,可以使用已經(jīng)定義的類中的方法和變量。類的方法可以被繼承,但是類的構(gòu)造器不能被繼承。3類的繼承(con.)類繼承的基本語法: class extends *在Java中,一個(gè)類只能繼承一個(gè)父類,這種方式叫做單繼承。這一點(diǎn)和C+不一樣。4類的繼承(con.)java.lang.Object類是所有類的父類雖然一個(gè)類只可以繼承一個(gè)父

2、類,但是一個(gè)父類卻可以被多個(gè)子類所繼承。從子類的角度看,它是“繼承(extends)”父類;而從父類的角度看,它是“派生(derive)”子類。它們指的都是同一個(gè)動(dòng)作,只是角度不同而已。5類的繼承例子public class Animalprotected int weight;public int getWeight()return weight;public void setWeight(int w)weight=w;public class Dog extends Animal /* *子類新增方法 */ public void bark() System.out.println(Wan

3、gWang); 6類的繼承例子(con.)public class MyDogpublic static void main(String args)Dog myDog = new Dog();myDog.setWeight(50);System.out.printf(My Dogs Weight is %f“, myDog.getWeight();myDog.bark();7toString()方法在Object類中,定義了一個(gè)toString()方法,用于返回一個(gè)表示這個(gè)對象的字符串覆蓋該方法能用來提供某對象的自定義信息簡單類型使用它們的封裝類,可轉(zhuǎn)換成String8訪問控制在Java中,

4、可以在類、類的屬性以及類的方法前面加上一個(gè)修飾符(modifier),來對類進(jìn)行一些訪問上的控制。修飾符同一個(gè)類中同一個(gè)包中子類中全局privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes9訪問控制(con.)訪問控制的限制程度從高到低如下圖所示。注意,Default不是一個(gè)修飾符,它只是用來表示一種不加任何修飾符時(shí)的狀態(tài)。 當(dāng)前類 當(dāng)前包 子類 全局privateDefaultprotectedpublic10方法的覆蓋(override)當(dāng)子類繼承父類時(shí),可以從父類繼承它的protected和public屬性和方法。如果從父類

5、繼承的方法不能滿足子類的需求,可以對其進(jìn)行改寫,這個(gè)過程叫方法的覆蓋(override),也稱為方法的重寫。當(dāng)對父類的方法進(jìn)行覆蓋時(shí),子類中的方法必須和父類中對應(yīng)的方法具有相同的方法名稱、輸入?yún)?shù)和返回值。子類中的覆蓋方法不能使用比父類中被覆蓋方法更嚴(yán)格的訪問權(quán)限。11方法的覆蓋例子public class PersonString name;int age;String sex;public String showName()return name;12方法的覆蓋例子(con.)public class Teacher extends Personprivate String departm

6、ent;public void setDepartment(String dept)department = dept;public String getDepartment()return department;/方法覆蓋public String showName()return name+老師;13方法的重載當(dāng)類中的方法名相同時(shí),稱為方法的重載(overload)例如:public void println(int i);public void println(char c);public void println(String s);14構(gòu)造器的重載(案例6-5)除了方法外,類的構(gòu)造器

7、也可以實(shí)現(xiàn)重載類的構(gòu)造器可以相互調(diào)用,調(diào)用方式是使用this關(guān)鍵字來實(shí)現(xiàn)15作業(yè)有工人,農(nóng)民,教師,科學(xué)家,服務(wù)生,其中,工人,農(nóng)民,服務(wù)生只有基本工資.教師除基本工資外,還有課酬(元/天),科學(xué)家除基本工資外,還有年終獎(jiǎng),請你寫出相關(guān)類,將各種類型的員工的全年工資打印出來;完成一個(gè)打印類,要求能用同名方法打印不同的類型的輸入?yún)?shù);write(int s);write(float s);write(String s);16面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階(下)ID:SCSJ001-Java Basic Syntax17面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)階super關(guān)鍵字this關(guān)鍵字封裝類=和equals()toStri

8、ng()18super 關(guān)鍵字在Java類中使用super來引用父類的成分super可用于訪問父類中定義的屬性super可用于調(diào)用父類中定義的成員方法super可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器super的追溯不僅于直接父類,直到Object類19調(diào)用父類構(gòu)造器在子類的構(gòu)造器中可使用語句super(argument_list) 調(diào)用父類的構(gòu)造器如果子類的構(gòu)造器中沒有顯式地調(diào)用父類構(gòu)造器,也沒有使用this關(guān)鍵字調(diào)用重載的其它構(gòu)造器,則系統(tǒng)默認(rèn)調(diào)用父類無參數(shù)的構(gòu)造器如果子類構(gòu)造器中既未顯式調(diào)用父類構(gòu)造器,而父類中又沒有無參的構(gòu)造器,則編譯出錯(cuò)20super關(guān)鍵字例子public class P

9、ersonprivate String name;private int age;private String sex;public String showName() return name;public class Teacher extends Person/方法覆蓋public String showName()return super.showName()+老師;21thisJava中為解決變量的命名沖突和不確定性問題,引入關(guān)鍵字“this”代表其所在方法的當(dāng)前對象。構(gòu)造器中指該構(gòu)造器所創(chuàng)建的新對象 方法中指調(diào)用該方法的對象this關(guān)鍵字的用法在類本身的方法或構(gòu)造器中引用該類的實(shí)例變

10、量和方法(案例6-6)將當(dāng)前對象作為參數(shù)傳遞給其它方法或構(gòu)造器(案例6-7)用來調(diào)用其他的重載的構(gòu)造器(案例6-8)22對象的構(gòu)造和初始化分析內(nèi)存分配,缺省的初始化進(jìn)行實(shí)例變量的初始化如下遞歸的進(jìn)行1. 設(shè)置實(shí)例變量的值為缺省的初始值 2. 調(diào)用對象的構(gòu)造器 ,綁定構(gòu)造器參數(shù)。3. 如果構(gòu)造器中有this()調(diào)用,則根據(jù)this()調(diào)用的參數(shù)調(diào)用相應(yīng)的重載構(gòu)造器,然后,轉(zhuǎn)到步驟5;否則轉(zhuǎn)到步驟4。4. 除java.lang.Object類外,調(diào)用父類的中的初始化塊初始化父類的屬性,然后調(diào)用父類構(gòu)造器,如果在構(gòu)造器中有super()調(diào)用,則根據(jù)super()中的參數(shù)調(diào)用父類中相應(yīng)的構(gòu)造器。5.

11、使用初始化程序和初始化塊初始化成員。6. 執(zhí)行構(gòu)造器方法體中其他語句。23初始化塊它指的是前面章節(jié)所屬的“游離塊”(1)不管使用哪個(gè)構(gòu)造器創(chuàng)建對象,它都會被首先運(yùn)行,(2)然后才是構(gòu)造器的主體部分被執(zhí)行 24對象初始化示例父類Person,子類Teacher初始化的三種情形調(diào)用父類的默認(rèn)構(gòu)造器構(gòu)造器中使用了this()調(diào)用本類中重載的構(gòu)造器構(gòu)造器中使用了super()調(diào)用父類的構(gòu)造器25封裝類對于簡單類型數(shù)據(jù),Java對它們進(jìn)行了封裝,使它們都有相應(yīng)的封裝類簡單數(shù)據(jù)類型封裝類 boolean Boolean byte Byte short Short int Integer long Long

12、 char Character float Float double Double26Integer的方法byte byteValue() 以 byte 類型返回該 Integer 的值。 double doubleValue()以 double 類型返回該 Integer 的值。 float floatValue() 以 float 類型返回該 Integer 的值。 int intValue() 以 int 類型返回該 Integer 的值。 long longValue() 以 long 類型返回該 Integer 的值。 short shortValue() 以 short 類型返回該

13、 Integer 的值。String toString() 返回一個(gè)表示該 Integer 值的 String 對象。 static int bitCount(int i) 返回指定 int 值的二進(jìn)制補(bǔ)碼表示形式的 1 位的數(shù)量。 static int parseInt(String s) 將字符串參數(shù)作為有符號的十進(jìn)制整數(shù)進(jìn)行解析。 static int parseInt(String s, int radix) 使用第二個(gè)參數(shù)指定的基數(shù),將字符串參數(shù)解析為有符號的整數(shù)。27Integer的方法static String toBinaryString(int i) 以二進(jìn)制(基數(shù) 2)無符

14、號整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式。 static String toHexString(int i) 以十六進(jìn)制(基數(shù) 16)無符號整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式。 static String toOctalString(int i) 以八進(jìn)制(基數(shù) 8)無符號整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式。 static String toString(int i) 返回一個(gè)表示指定整數(shù)的 String 對象。 static String toString(int i, int radix) 返回用第二個(gè)參數(shù)指定基數(shù)表示的第一個(gè)參數(shù)的字符串表示形式。 static Intege

15、r valueOf(int i)返回一個(gè)表示指定的 int 值的 Integer 實(shí)例。 static Integer valueOf(String s)返回保存指定的 String 的值的 Integer 對象。 static Integer valueOf(String s, int radix) 返回一個(gè) Integer 對象,該對象中保存了用第二個(gè)參數(shù)提供的基數(shù)進(jìn)行解析時(shí)從指定的 String 中提取的值。 28封裝類的例子public class WrapperClasspublic static void main(String args)Integer i = new Integ

16、er(10);Integer j = new Integer(10);System.out.println(i=j); /封裝類轉(zhuǎn)化簡單類型。int k = Value(); int l = i;29封裝類例子(con.)1010ij30= 和 equals()=和equals()都是用于相等型判斷的操作符= 操作符用來判斷兩個(gè)引用是否指的同一個(gè)對象,或者兩個(gè)簡單類型的值是否相等equals()方法用來判斷對象的內(nèi)容是否相等,相等的條件在該類中定義Object類的equals()方法直接用=實(shí)現(xiàn)31覆蓋默認(rèn)的equals()在Object類中的equals()方法直接使用=實(shí)現(xiàn),不實(shí)用覆蓋默認(rèn)

17、的equals()方法按照自己的需要,在equals()方法中定義對象相等的含義32String類ID:SCSJ001-Java Basic Syntax33 String類String對象代表一組不可改變的Unicode字符序列它的方法可用來創(chuàng)造新的字符串:concat、replace、substring、toLowerCase、toUpperCase和trim。查找字符的方法:endWith、startWith、 indexOf、 lastIndexOf。比較字符的方法:equals、equalsIgnoreCase、compareTo。其它:charAt、length, format,

18、getBytes34String對象的創(chuàng)建法一:String s = new String(“This is a string”);法二:String s = “This is a string”;35String對象創(chuàng)建String s1 = “abc”;String s2 = new String(s1);String s3 = new String(“abc”);String s4 = “abc”;s1=s4 : trues2=s3 : falses1=s2 : falses3=s4 : false“abc”s1s3s4s2“abc”“abc”棧堆36內(nèi)存地址的變化String a =

19、new String(abc);String b = a;a = new String(123);System.out.println(b);/results:abc , why?b:0 x34877654a:0 x34877654“abc”“123”棧堆a(bǔ):0 xff8776540 x348776540 xff87765437StringBuffer/StringBuilder類StringBuffer對象代表一組可改變的Unicode字符序列構(gòu)建器:StringBuffer() 創(chuàng)建一個(gè)空的字符緩沖,長度為16個(gè)字符容量;StringBuffer(int capacity) 用指定的初始容

20、量創(chuàng)建一個(gè)空的字符緩沖;StringBuffer(String initString) 創(chuàng)建包含initString的字符緩沖,并加上16個(gè)字符的備用空間。緩沖的修改操作:append、insert、reverse、setCharAt、setLength。38分析字符串相加的速度/字符串相加方法一:long start = System.currentTimeMillis();String s = ;for(int i = 0; i 10000; i+) s = s + i;System.out.println(System.currentTimeMillis() - start);/字符串相

21、加方法二:long start = System.currentTimeMillis();StringBuilder sb = new StringBuilder();for(int i = 0; i 10000; i+) sb.append(i);System.out.println(System.currentTimeMillis() - start);39StringUtils類(開源類,選學(xué))Apache項(xiàng)目下的開源項(xiàng)目,commons-lang-x.x.jarStringUtils中方法的操作對象是java.lang.String類型的對象,是JDK提供的String類型操作方法的補(bǔ)

22、充 ,除了構(gòu)造器,StringUtils中一共有130多個(gè)方法,并且都是static的 .40StringUtils.isEmptypublic static boolean isEmpty(String str) 判斷某字符串是否為空,為空的標(biāo)準(zhǔn)是str = null 或 str.length() = 0 下面是示例: StringUtils.isEmpty(null) = true StringUtils.isEmpty() = true StringUtils.isEmpty( ) = false StringUtils.isEmpty( ) = false StringUtils.is

23、Empty(bob) = false StringUtils.isEmpty( bob ) = false 41StringUtils.isNotEmptypublic static boolean isNotEmpty(String str) 判斷某字符串是否非空,等于!isEmpty(String str),下面是示例: StringUtils.isNotEmpty(null) = false StringUtils.isNotEmpty() = false StringUtils.isNotEmpty( ) = true StringUtils.isNotEmpty( ) = true

24、StringUtils.isNotEmpty(bob) = true StringUtils.isNotEmpty( bob ) = true 42StringUtils.isBlank/isNotBlankpublic static boolean isBlank(String str) 判斷某字符串是否為空或長度為0或由空白符(whitespace)構(gòu)成 ,下面是示例: StringUtils.isBlank(null) = true StringUtils.isBlank() = true StringUtils.isBlank( ) = true StringUtils.isBlank

25、( ) = true StringUtils.isBlank(t n f r) = true StringUtils.isBlank(b) = false StringUtils.isBlank(bob) = false StringUtils.isBlank( bob ) = false 43StringUtils.trimpublic static String trim(String str) 去掉字符串兩端的控制符(control characters, char = 32) 如果輸入為null則返回null ,下面是示例: StringUtils.trim(null) = null StringUtils.trim() = StringUtils.trim( ) = StringUtils.trim( b t n f r ) = StringUtils.trim( ntss b) = ss StringUtils.trim( d d dd ) = d d dd StringUtils.trim(dd ) = dd StringUtils.trim( dd ) = d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論