------- android培訓、java培訓、期待與您交流! ----------
1 public int add(int a,int b){}
這個時候就傳遞了兩個整數類型進去了,分別命名為a和b。這個時候方法里面就可以直接拿a和b開始用了。
我們調用的時候就可以直接:
1 add(5,6);
這樣我們就把整數5和整數6傳遞給了名字叫add方法的這個方法。5和6就是實際傳給add方法的參數,也就是【實參】。通常情況下,我們可能傳入的是兩個變量。例如:
1 int x=6;2 int y=7;3 add(x,y);
這個時候x和y就是實參了。分別對應的是add()方法的形參a和b。要注意一點,a和b跟x、y有什么關系呢?其實從名字上看是一點關系都沒有的,唯一有關系的就是他們的數據類型必須要一一對應。逗號前面,方法要求傳的是整數型,你調用這個方法的時候就必須傳遞一個整數,后面如果要求傳遞一個數組,你就必須傳遞一個數組類型進去,否則就調用錯誤了。
形參的命名a、b就是的意義就是給傳入的兩個信息命個名字。第一個我叫a,第二個我叫b。在方法體內部我就可以直接調用了這兩個參數了。僅此而已。比如實參傳來的兩個整數型變量叫a、b形參也叫a、b,這個時候傳入的a、b和方法內部的a、b一樣嗎?表面看一樣,其實傳入的a和b是方法外的兩個變量,方法內部也把重新命名了兩個變量叫a和b來接收方法外的兩個變量。方法外的方法內部的a和b占用了不同位置的內存的。所以不是同一個東西。
接著說,如果我需要把若干個整數進行相加。有的時候是兩個,有的時候是3個,有的時候我還要把5個數進行相加。這個時候我們需要命名不同的函數名嗎?Java提供了方法重載的功能。我們就用同一個函數名,需要傳兩個整數在函數名的小括號里面傳入兩個整數形參,需要傳三個就傳入三個整數形參。函數被調用的時候,你傳入了幾個實參,java就會去尋找能傳入幾個實參的那個函數,然后把實參挨個傳過去就可以了。
這樣在調用的時候會很方便。一個函數名就對應一種功能。如果是兩個都需要傳入兩個整數類型的函數,他們的區別只是返回值不同,這是不算方法重載的,這樣會報錯。因為java會認為他們是同一個功能的函數。簡單的說,java看兩個方法是不是重復只看形參的類型和個數,不管該方法的返回值。
下面是一個完整的代碼實例:
1 package blog; 2 3 public class Overloaddemo { 4 5 public int add(int a,int b){ //傳入兩個整數形參 6 return a+b; 7 } 8 9 public int add(int a,int b,int c){ //傳入三個整數形參10 System.out.PRintln(add(a,b)); //重載的方法中調用了兩個整數形參的同名方法11 return a+b+c;12 }13 14 public static void main(String[] args) {15 Overloaddemo test=new Overloaddemo();16 int result=test.add(1,2);17 System.out.println(result);18 19 int result2=test.add(1,3,4);20 21 //System.out.println(result);22 System.out.println(result2);23 }24 25 }
結果是:
3 4 8
二、構造方法及構造方法重載
1 class Demo{2 public Demo(int i){}3 }
可以看出:【1】構造方法的名字必須和類名完全一樣。因為java是區分大小寫的,所以大小寫也不能寫錯。
【2】構造函數沒有返回值,也不能寫void。
我們是無法像調用類其他成員方法一樣調用類的構造構造方法的。構造方法的運行是通過new關鍵字創建一個對象的時候,java會自動調用它為對象進行初始化。
構造函數的重載其實跟方法重載差不多,也是在同一個類中因構造函數的形參類型和個數不同構成了重載。new該對象的時候,根據new class()括號中的參數類型和個數不同,調用不同的構造函數。一個類中不同的構造函數之間是可以互相調用的。也就是只要能遵循初始化一個對象只能一開始就初始化,且只能一次的原則就可以了。
我們如果在一個構造方法中調用另一個構造方法,那么可以使用this()的方式,this()括號中的參數為構造方法的參數。也可以省略寫。從用this可以看出,構造函數不是類的靜態成員。
對構造方法進行調用時,對new的使用特點:
1 package blog; 2 3 public static void main(String[] args) { 4 //通過new初始化一個對象調用了空參的構造函數 5 new Gouzaofangfa(); 6 } 7 8 public Gouzaofangfa(){ 9 //空參的構造函數調用了一個參數的構造函數10 this(3); 11 System.out.println("test");12 } 13 14 public Gouzaofangfa(int i){15 System.out.println(++i); 16 } 17 18 }
結果是:
4test
三、方法重寫與多態
在java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。也常叫做方法覆蓋。
多態有兩種表現形式,分為重載和覆蓋?,F在講的就是方法覆蓋。
先看看代碼:
1 package blog; 2 3 public class DemoPolymorphism{ //演示多態 4 public static void main(String[] args){ 5 Son s1=new Son(); 6 s1.work(); 7 8 // 子類繼承父類,子類擁有父類所有的功能,因此可以把子類傳給父類 9 Dad s2=new Son();10 s2.work(); //調用了父類的工作方法,但是傳遞的是兒子對象,兒子對象既是父類對象也是子類對象,兒子的工作是碼代碼11 12 Dad s3=(Dad)s1;13 s3.work(); //把子類對象強轉成父類對象,就相當于化妝成了父親,但是讓其工作還是只會碼代碼14 15 s1.show(); //調用了子類的show方法,展示的是其父類的工作方法,設計房子16 17 }18 19 20 }21 22 class Son extends Dad{23 //兒子繼承了父類,因為兒子的工作是寫代碼,所以重寫了父類的work方法。這個叫方法重寫24 public void work(){25 System.out.println("兒子在工作:碼代碼");26 }27 28 public void show(){29 super.work(); //調用了父類的工作方法,會輸出了父類的工作方法,設計房子30 }31 }32 33 class Dad{34 //爸爸的工作內容是設計房子35 void work(){36 System.out.println("爸爸在工作:設計房子");37 }38 }
子類重寫了父類的工作方法,因為子類的工作是碼代碼,父類是設計房子。子類的對象屬于子類類型也屬于父類類型。
再來一個多態的例子。
1 abstract class Animal 2 { 3 abstract void eat(); 4 } 5 6 class Cat extends Animal 7 { 8 public void eat() 9 {10 System.out.println("吃魚");11 }12 public void catchMouse()13 {14 System.out.println("抓老鼠");15 }16 }17 18 class Dog extends Animal19 {20 public void eat()21 {22 System.out.println("吃骨頭");23 }24 public void kanJia()25 {26 System.out.println("看家");27 }28 }29 30 class DuoTaiDemo31 {32 public static void main(String[] args)33 {34 function(new Cat());35 function(new Dog());36 37 Animal a = new Cat();//向上轉型38 a.eat();39 40 Cat c = (Cat)a;//向下轉型41 c.catchMouse();42 43 44 }45 46 public static void function(Animal a)47 {48 a.eat();49 //用于子類型有限50 //或判斷所屬類型進而使用其特有方法51 if(a instanceof Cat)52 {53 Cat c = (Cat)a;54 c.catchMouse();55 }56 else if(a instanceof Dog)57 {58 Dog c = (Dog)a;59 c.kanJia();60 }61 }62 63 64 }
這個例子就把多態用途展現得很充分了。其中定義了一個方法,只要拋入的是動物類型,我就會調用其吃的方法。拋入狗就會啃骨頭,拋入貓就會吃魚。但是要注意的是,這個方法不能含有直接調用動物類型非公有的方法,也就是抽象類中不存在的方法。否則就會出錯誤。就好像拋入貓,就不能在方法中調用其看家的方法,否則就會出錯,即使是狗也不行,因為動物類型沒有這個共性的方法,你要調用,你必須強制轉型成狗的類型。這個時候你就可以調用看家的方法了。
新聞熱點
疑難解答