Java高級(jí)編程-第02章理論課構(gòu)造方法與方法重載ppt課件_第1頁
Java高級(jí)編程-第02章理論課構(gòu)造方法與方法重載ppt課件_第2頁
Java高級(jí)編程-第02章理論課構(gòu)造方法與方法重載ppt課件_第3頁
Java高級(jí)編程-第02章理論課構(gòu)造方法與方法重載ppt課件_第4頁
Java高級(jí)編程-第02章理論課構(gòu)造方法與方法重載ppt課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第 二 章構(gòu)造方法與方法重載構(gòu)造方法與方法重載回憶回憶v對(duì)象由屬性數(shù)據(jù)和方法函數(shù)組成;v類是具有相同屬性和方法的對(duì)象的集合;v封裝可以隱藏對(duì)象實(shí)現(xiàn)的細(xì)節(jié)部分;v對(duì)象是引用數(shù)據(jù)類型,使用new運(yùn)算符創(chuàng)建對(duì)象實(shí)例,使用成員運(yùn)算符訪問對(duì)象中的成員;本章相關(guān)詞匯藍(lán)色為關(guān)鍵字)本章相關(guān)詞匯藍(lán)色為關(guān)鍵字)單 詞說 明this這,這個(gè)overloaded重載,超載overloaded method方法重載本章目標(biāo)本章目標(biāo)v方法重載v重載構(gòu)造方法v對(duì)象在內(nèi)存中的存放形式vthis關(guān)鍵字JavaJava中的方法中的方法v 在Java中,函數(shù)直接定義即可;v Java中,函數(shù)被稱為方法;v 定義一個(gè)方法的一般形式

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

3、其中包含求絕對(duì)值的方法Java中的任何方法都必須在類中定義中的任何方法都必須在類中定義*/public class AbsoluteValue /*求絕對(duì)值的方法求絕對(duì)值的方法*/ public int abs(int x) return (x = 0) ? x : -x); /*main方法,程序入口方法,程序入口*/ public static void main(String args) /必須先實(shí)例化類的對(duì)象,才可以調(diào)用到其中的成員方法必須先實(shí)例化類的對(duì)象,才可以調(diào)用到其中的成員方法 AbsoluteValue obj = new AbsoluteValue(); int a = -8

4、, b; b = obj.abs(a); /調(diào)用調(diào)用abs方法求方法求a的絕對(duì)值的絕對(duì)值 System.out.println(a + 的絕對(duì)值是的絕對(duì)值是 + b); 方法的定義方法的定義方法的調(diào)用方法的調(diào)用案例分析案例分析v在上面的案例中,我們已經(jīng)定義了求整數(shù)絕對(duì)值的方法;v但有時(shí)候,我們可能還需要求浮點(diǎn)數(shù)的絕對(duì)值,請(qǐng)問:可以繼續(xù)使用這個(gè)方法嗎?v事實(shí)上是行不通的,這個(gè)方法只能求出整數(shù)的絕對(duì)值,對(duì)于浮點(diǎn)數(shù),還需另外再定義求浮點(diǎn)數(shù)絕對(duì)值的方法。修改案例修改案例public class AbsoluteValue /*求整數(shù)絕對(duì)值的方法求整數(shù)絕對(duì)值的方法*/ public int absOfI

5、nt(int x) return (x = 0) ? x : -x); /*求浮點(diǎn)數(shù)絕對(duì)值的方法求浮點(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 = -8, b; b = obj.absOfInt(a); System.out.println(a + 的絕對(duì)值是的絕對(duì)值是 + b); float c = -3.14f, d; d = o

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

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

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

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

10、同的函數(shù)名稱輸出任何類型的數(shù)據(jù)。int square(int x) float square(float x) double square(double x) 方法重載的兩種方式之二方法重載的兩種方式之二v利用不同數(shù)量的參數(shù)重載,如:v將調(diào)用與參數(shù)最匹配的方法,如果沒有方法得出最佳匹配,那么編譯器將報(bào)錯(cuò);v編譯器解決重載的方式與方法定義的順序無關(guān);v重載不考慮方法的返回值類型。/*函數(shù)定義函數(shù)定義*/int fun(int n1) int fun(int n1, int n2, int n3) /*函數(shù)調(diào)用函數(shù)調(diào)用*/fun(a);fun(x, y, z);方法重載的作用域規(guī)則方法重載的作用域

11、規(guī)則v只有屬于同一作用域范圍內(nèi)的方法才能構(gòu)成重載。class First public void show() class Second public void show(int x) 不構(gòu)成重載不構(gòu)成重載課堂練習(xí)課堂練習(xí)1 1在Java中,對(duì)于成員方法float add(float f1, float f2) 下面選項(xiàng)()是對(duì)該成員方法的重載。int add(int n1, int n2) float add(float f) float add(float f2, float f1) void add(float f1, float f2) void add(float f1, float

12、 f2, float x) 課堂練習(xí)課堂練習(xí)2 2在Java中,下列方法()不能與int fun(int x) 構(gòu)成方法重載。int fun(int x, int y) float fun(int x) int fun(float x) int fun(int x, int y, int z) 關(guān)于方法重載的重要提示關(guān)于方法重載的重要提示請(qǐng)勿將功能完全不一請(qǐng)勿將功能完全不一樣的方法進(jìn)行重載!樣的方法進(jìn)行重載!構(gòu)造方法構(gòu)造方法v在上例中,只能逐個(gè)地為數(shù)據(jù)成員賦值,如果想在對(duì)象實(shí)例化的同時(shí)就初始化成員屬性,就使用到了構(gòu)造方法;v構(gòu)造方法是特殊的成員方法,它與類同名,在對(duì)象實(shí)例化時(shí)由虛擬機(jī)自動(dòng)調(diào)用;

13、v請(qǐng)注意:構(gòu)造方法沒有返回值類型,也不能有返回值。構(gòu)造方法構(gòu)造方法v正是由于在實(shí)例化對(duì)象的同時(shí)會(huì)自動(dòng)調(diào)用構(gòu)造方法,所以構(gòu)造方法一般用來給數(shù)據(jù)成員分配資源或初始化數(shù)據(jù)成員;v構(gòu)造方法的一般形式:v訪問權(quán)限 類名形參列表) v 方法體v v因?yàn)槭怯商摂M機(jī)來調(diào)用構(gòu)造方法,所以構(gòu)造方法一般應(yīng)定義成public。構(gòu)造方法示例構(gòu)造方法示例/*定義定義ConstructorDemo類,對(duì)構(gòu)造方法進(jìn)行測試類,對(duì)構(gòu)造方法進(jìn)行測試*/class ConstructorDemo /*構(gòu)造方法,方法名與類名完全一致構(gòu)造方法,方法名與類名完全一致 無需指定返回值類型,也不能有返回值無需指定返回值類型,也不能有返回值*/

14、 public ConstructorDemo() System.out.println(這是構(gòu)造方法這是構(gòu)造方法); /*Test類,用來容納類,用來容納main方法方法一般將包含有一般將包含有main方法的類聲明為方法的類聲明為public*/public class Test /*main方法,程序入口方法,程序入口*/ public static void main(String args) /*實(shí)例化實(shí)例化ConstructorDemo類的對(duì)象類的對(duì)象*/ ConstructorDemo cd = new ConstructorDemo(); 為為StudentStudent類添加構(gòu)

15、造方法類添加構(gòu)造方法class Student /定義學(xué)生類定義學(xué)生類 private String name; /姓名,私有姓名,私有 private int age; /年齡,私有年齡,私有 private float weight; /體重,私有體重,私有 /構(gòu)造方法,根據(jù)傳遞進(jìn)來的參數(shù),為數(shù)據(jù)成員賦值構(gòu)造方法,根據(jù)傳遞進(jìn)來的參數(shù),為數(shù)據(jù)成員賦值 public Student(String n, int a, float w) /分別為每個(gè)數(shù)據(jù)成員賦初始值分別為每個(gè)數(shù)據(jù)成員賦初始值 name = n; age = a; weight = w; public void setName(St

16、ring n) /為姓名賦值的方法,公有,代碼略為姓名賦值的方法,公有,代碼略 public void setAge(int a) /為年齡賦值的方法,公有,代碼略為年齡賦值的方法,公有,代碼略 public void setWeight(float w) /為體重賦值的方法,公有,代碼略為體重賦值的方法,公有,代碼略 public void display() /將所有信息打印出來的方法,公有,代碼略將所有信息打印出來的方法,公有,代碼略 public void dining() /吃飯的方法,公有,代碼略吃飯的方法,公有,代碼略 public void walk() /走路的方法,公有,代

17、碼略走路的方法,公有,代碼略public class Test public static void main(String args) /利用構(gòu)造方法,為數(shù)據(jù)成員指定初始值利用構(gòu)造方法,為數(shù)據(jù)成員指定初始值 Student std = new Student(張三張三, 18, 55); std.display(); /將信息打印出來將信息打印出來 構(gòu)造方法續(xù))構(gòu)造方法續(xù))v每個(gè)對(duì)象在生成時(shí)都必須執(zhí)行構(gòu)造方法,而且只能執(zhí)行一次;v如果構(gòu)造方法調(diào)用失敗,那么對(duì)象也無法創(chuàng)建;v不可以顯式地直接調(diào)用構(gòu)造方法;v在沒有定義構(gòu)造方法的情況下,類會(huì)自動(dòng)產(chǎn)生一個(gè)無參數(shù)的默認(rèn)構(gòu)造方法,這個(gè)默認(rèn)的構(gòu)造方法什么

18、都不做;v一旦顯式地定義了構(gòu)造方法,默認(rèn)構(gòu)造方法自動(dòng)消失。重載構(gòu)造方法重載構(gòu)造方法v方法重載的一個(gè)重要應(yīng)用就是重載構(gòu)造方法;v可以定義一組構(gòu)造方法,使其構(gòu)成重載關(guān)系,從而方便使用者能夠靈活機(jī)動(dòng)地以各種不同的方式來實(shí)例化對(duì)象。重載構(gòu)造方法示例重載構(gòu)造方法示例class MyTime /定義時(shí)間類定義時(shí)間類 private int mHour, mMinute, mSecond; /三個(gè)成員變量,時(shí)、分、秒三個(gè)成員變量,時(shí)、分、秒 public MyTime() /構(gòu)造方法重載構(gòu)造方法重載1 mHour = 0; mMinute = 0; mSecond = 0; public MyTime(in

19、t hour) /構(gòu)造方法重載構(gòu)造方法重載2 mHour = hour; mMinute = 0; mSecond = 0; public MyTime(int hour, int minute) /構(gòu)造方法重載構(gòu)造方法重載3 mHour = hour; mMinute = minute; mSecond = 0; public MyTime(int hour, int minute, int second) /構(gòu)造方法重載構(gòu)造方法重載4 mHour = hour; mMinute = minute; mSecond = second; public void display() /顯示時(shí)間信

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

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

溫馨提示

  • 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)論