JAVA類與對(duì)象_方法重載_第1頁
JAVA類與對(duì)象_方法重載_第2頁
JAVA類與對(duì)象_方法重載_第3頁
JAVA類與對(duì)象_方法重載_第4頁
JAVA類與對(duì)象_方法重載_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第二章 JAVA核心技術(shù)OOP II類和對(duì)象II回顧 對(duì)象由屬性(數(shù)據(jù))和方法(函數(shù))組成; 類是具有相同屬性和方法的對(duì)象的集合; 封裝可以隱藏對(duì)象實(shí)現(xiàn)的細(xì)節(jié)部分; 對(duì)象是引用數(shù)據(jù)類型,使用new運(yùn)算符創(chuàng)建對(duì)象實(shí)例,使用成員運(yùn)算符訪問對(duì)象中的成員; 訪問修飾符用來控制訪問權(quán)限,可以有效地保證數(shù)據(jù)安全; 構(gòu)造方法一般用來初始化對(duì)象中的數(shù)據(jù)成員類和對(duì)象II 方法重載 重載 構(gòu)造方法 對(duì)象 在內(nèi)存中的 存放形式 this關(guān)鍵字 靜態(tài)成員,static關(guān)鍵字 包 打包,package關(guān)鍵字 導(dǎo)入包,import關(guān)鍵字思考 Java中,函數(shù)被稱為方法; 定義一個(gè)方法的一般形式:訪問權(quán)限 返回值類型 方法

2、名稱(形參列表) 方法主體; 我們更關(guān)注的是方法原型,對(duì)于方法原型的三個(gè)主要組成部分應(yīng)當(dāng)明確區(qū)分: 返回值類型 方法名稱 形式參數(shù)在Java中定義方法/*Java中的方法示例代碼片段*/*定義求平方值的方法*/public int square(int x) return (x * x);返回值類型方法名稱形式參數(shù)案例/*編寫求絕對(duì)值的方法來求整數(shù)的絕對(duì)值*/*AbsoluteValue類,其中包含求絕對(duì)值的方法Java中的任何方法都必須在類中定義*/public class AbsoluteValue /*求絕對(duì)值的方法*/ public int abs(int x) return (x =

3、 0) ? x : -x); /*main方法,程序入口*/ public static void main(String args) /必須先實(shí)例化類的對(duì)象,才可以調(diào)用到其中的成員方法 AbsoluteValue obj = new AbsoluteValue(); int a = -8, b; b = obj.abs(a); /調(diào)用abs方法求a的絕對(duì)值 System.out.println(a + 的絕對(duì)值是 + b); 方法的定義方法的調(diào)用案例分析 在上面的案例中,我們已經(jīng)定義了求整數(shù)絕對(duì)值的方法; 但有時(shí)候,我們可能還需要求浮點(diǎn)數(shù)的絕對(duì)值,請(qǐng)問:可以繼續(xù)使用這個(gè)方法嗎? 事實(shí)上是行不

4、通的,這個(gè)方法只能求出整數(shù)的絕對(duì)值,對(duì)于浮點(diǎn)數(shù),還需另外再定義求浮點(diǎn)數(shù)絕對(duì)值的方法。修改案例public class AbsoluteValue /*求整數(shù)絕對(duì)值的方法*/ public int absOfInt(int x) return (x = 0) ? x : -x); /*求浮點(diǎn)數(shù)絕對(duì)值的方法*/ public float absOfFloat(float x) return (x = 0) ? x : -x); public static void main(String args) AbsoluteValue obj = new AbsoluteValue(); int a =

5、-8, b; b = obj.absOfInt(a); System.out.println(a + 的絕對(duì)值是 + b); float c = -3.14f, d; d = obj.absOfFloat(c); System.out.println(c + 的絕對(duì)值是 + d); 如果還要求其它類型的絕對(duì)值,就需要定義更多的方法,這對(duì)于調(diào)用者來說,將會(huì)是非常麻煩的事情。方法重載 用于定義一組方法,這些方法具有相同的名稱,并執(zhí)行類似的操作,但是卻使用不同的參數(shù)列表; 編譯器會(huì)根據(jù)調(diào)用時(shí)傳遞的實(shí)際參數(shù)自動(dòng)判斷具體調(diào)用的是哪個(gè)重載方法,如:/*abs方法的重載*/int abs(int x) fl

6、oat abs(float x) double abs(double x) long abs(long x) 方法重載的三大原則 方法名相同 參數(shù)不同(可以有三方面的不同) 數(shù)量不同 類型不同 順序不同 同一作用域 溫馨提示:方法重載跟方法的返回值類型沒有任何關(guān)系。也就是說,只有返回值不同的方法不能構(gòu)成重載。/*錯(cuò)誤的方法重載*/void fun(int x) ;int fun(int x) ;方法重載示例public class AbsoluteValue public int abs(int x) /重載方式1,求整數(shù)的絕對(duì)值 return (x = 0) ? x : -x); publi

7、c float abs(float x) /重載方式2,求浮點(diǎn)數(shù)的絕對(duì)值 return (x = 0) ? x : -x); public double abs(double x) /重載方式3,求雙精度數(shù)的絕對(duì)值 return (x = 0) ? x : -x); public long abs(long x) /重載方式4,求長(zhǎng)整型數(shù)的絕對(duì)值 return (x = 0) ? x : -x); public static void main(String args) AbsoluteValue obj = new AbsoluteValue(); int a = -8, b; b = ob

8、j.abs(a); System.out.println(a + 的絕對(duì)值是 + b); float c = -3.14f, d; d = obj.abs(c); System.out.println(c + 的絕對(duì)值是 + d); 方法重載的兩種方式之一 利用不同數(shù)據(jù)類型的參數(shù)重載; 對(duì)于帶有相同數(shù)量參數(shù)但參數(shù)類型不同的重載方法,編譯器可以區(qū)分它們,如: 只要所有參數(shù)式樣都是唯一的,就可以使用多個(gè)重載; 很多編程語言已經(jīng)重載了輸出方法,以便您可以用相同的函數(shù)名稱輸出任何類型的數(shù)據(jù)。int square(int x) float square(float x) double square(do

9、uble x) 方法重載的兩種方式之二 利用不同數(shù)量的參數(shù)重載,如: 將調(diào)用與參數(shù)最匹配的方法,如果沒有方法得出最佳匹配,那么編譯器將報(bào)錯(cuò); 編譯器解決重載的方式與方法定義的順序無關(guān); 重載不考慮方法的返回值類型。/*函數(shù)定義*/int fun(int n1) int fun(int n1, int n2, int n3) /*函數(shù)調(diào)用*/fun(a);fun(x, y, z);方法重載的作用域規(guī)則 只有屬于同一作用域范圍內(nèi)的方法才能構(gòu)成重載。class First public void show() class Second public void show(int x) 不構(gòu)成重載課堂練

10、習(xí)1 在Java中,對(duì)于成員方法float add(float f1, float f2) 下面選項(xiàng)()是對(duì)該成員方法的重載。int add(int n1, int n2) float add(float f) void add(float f1, float f2) void add(float f1, float f2, float x) float add(float f2, float f1) 課堂練習(xí)2 在Java中,下列方法()不能與int fun(int x) 構(gòu)成方法重載。int fun(int x, int y) float fun(int x) int fun(float

11、x) int fun(int x, int y, int z) 關(guān)于方法重載的重要提示請(qǐng)勿將功能完全不一樣的方法進(jìn)行重載!什么是構(gòu)造方法構(gòu)造方法- 在類的對(duì)象被實(shí)例化的過程中,代碼自動(dòng)調(diào)用的特殊方法構(gòu)造方法的一般形式: 訪問權(quán)限 類名(形參列表) 方法體 因?yàn)槭怯商摂M機(jī)來調(diào)用構(gòu)造方法,所以構(gòu)造方法一般應(yīng)定義成public。重載構(gòu)造方法 方法重載的一個(gè)重要應(yīng)用就是重載構(gòu)造方法; 可以定義一組構(gòu)造方法,使其構(gòu)成重載關(guān)系,從而方便使用者能夠靈活機(jī)動(dòng)地以各種不同的方式來實(shí)例化對(duì)象。重載構(gòu)造方法示例class MyTime /定義時(shí)間類 private int mHour, mMinute, mSeco

12、nd; /三個(gè)成員變量,時(shí)、分、秒 public MyTime() /構(gòu)造方法重載1 mHour = 0; mMinute = 0; mSecond = 0; public MyTime(int mHour) /構(gòu)造方法重載2 mHour = mHour; mMinute = 0; mSecond = 0; public MyTime(int hour, int minute) /構(gòu)造方法重載3 mHour = hour; mMinute = minute; mSecond = 0; public MyTime(int hour, int minute, int second) /構(gòu)造方法重載

13、4 mHour = hour; mMinute = minute; mSecond = second; public void display() /顯示時(shí)間信息的方法 System.out.println(mHour + : + mMinute + : + mSecond); 重載構(gòu)造方法示例(續(xù))/*測(cè)試時(shí)間類*/public class Test /*main方法,程序入口*/ public static void main(String args) /分別調(diào)用不同的構(gòu)造方法來初始化時(shí)間對(duì)象 MyTime t1 = new MyTime(); /調(diào)用重載方式1 t1.display();

14、 MyTime t2 = new MyTime(8); /調(diào)用重載方式2 t2.display(); MyTime t3 = new MyTime(8, 30); /調(diào)用重載方式3 t3.display(); MyTime t4 = new MyTime(8, 30, 30); /調(diào)用重載方式4 t4.display(); /*使用重載構(gòu)造方法可以使初始化對(duì)象的方式靈活機(jī)動(dòng),大大方便類的使用者。*/對(duì)象在內(nèi)存中的存放形式成員方法1成員方法2成員方法n成員變量1成員變量2成員變量n成員變量1成員變量2成員變量n成員變量1成員變量2成員變量n對(duì)象1對(duì)象3對(duì)象2每個(gè)對(duì)象都有自己獨(dú)立的數(shù)據(jù)成員,但是所

15、有的對(duì)象共享成員方法。this關(guān)鍵字 既然所有的對(duì)象都共用相同的成員方法,那么在不同的對(duì)象都調(diào)用同一方法時(shí),它是怎么確定要使用哪個(gè)對(duì)象的數(shù)據(jù)成員呢? 每個(gè)成員方法都有一個(gè)隱含的this引用,它總是指向調(diào)用它的對(duì)象; 關(guān)鍵字this給出用于調(diào)用成員方法的對(duì)象的地址; 每當(dāng)調(diào)用成員方法時(shí),編譯器會(huì)向this分配調(diào)用該方法的對(duì)象的地址; 可以像使用任何引用那樣使用this。this引用示例/*this示例,代碼片段*/public class Student /定義學(xué)生類 private String mName; /姓名 private int mAge; /年齡 public Student(S

16、tring name, int age) /隱式調(diào)用,等同于this.mName = name; mName = name; /顯式調(diào)用,等同于mAge = age; this.mAge = age; 回顧C(jī)語言中的靜態(tài)變量 C語言中的靜態(tài)變量的特點(diǎn): 具有全局變量的生命周期(完成了某些全局變量才能完成的功能); 具有有局部變量的作用域(比全局變量更安全)。 在C語言中聲明靜態(tài)變量的語法:static int x; 聲明靜態(tài)變量使用關(guān)鍵字static。靜態(tài)成員變量 在成員變量前加static關(guān)鍵字,可以將其聲明為靜態(tài)成員變量; 如果類中成員變量被定義為靜態(tài),那么不論有多少個(gè)對(duì)象,靜態(tài)成員變量只

17、有一份內(nèi)存拷貝,即所有對(duì)象共享該成員變量; 靜態(tài)成員變量的作用域只在類內(nèi)部,但其生命周期卻貫穿整個(gè)程序。靜態(tài)成員變量示例class Dog public static int count = 0; /靜態(tài)成員變量 public Dog() /構(gòu)造方法 count+; public class Test public static void main(String args) System.out.println(當(dāng)前狗的數(shù)量是: + Dog.count); Dog d1 = new Dog(); Dog d2 = new Dog(); System.out.println(當(dāng)前狗的數(shù)量是: +

18、 Dog.count); 靜態(tài)成員變量的注意事項(xiàng) 和程序同生命周期; 在沒有實(shí)例化對(duì)象時(shí),可以通過類名訪問靜態(tài)成員變量; 也可以通過對(duì)象訪問靜態(tài)成員變量,但不論使用的是哪個(gè)對(duì)象,訪問到的都是同一個(gè)變量; 靜態(tài)成員變量在聲明時(shí)最好初始化,如果不進(jìn)行初始化,系統(tǒng)會(huì)默認(rèn)初始化為初始值。靜態(tài)成員方法 在成員方法前加static關(guān)鍵字,可以將其聲明為靜態(tài)成員方法; 靜態(tài)成員方法只能對(duì)類的靜態(tài)成員變量進(jìn)行操作; 靜態(tài)成員方法沒有this引用; 在沒有實(shí)例化對(duì)象時(shí),可以通過類名訪問靜態(tài)成員方法。靜態(tài)成員方法示例class Dog private static int count = 0; /靜態(tài)成員變量 public Dog() count+; /顯示數(shù)量的方法,靜態(tài)成員方法 public static void displayCount() System.out.println(當(dāng)前狗的數(shù)量是: + count); public class Test public static void main(String args) /沒有實(shí)例化對(duì)象之前,直接通過類名調(diào)用靜態(tài)成員方法 Dog.displayCount(); Dog d1 = new Dog(); Dog d2 = new Dog(); Dog.displayCount();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論