亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【黑馬程序員】-Java基礎學習-方法重載、構造函數重載、方法重寫與多態

2019-11-14 15:26:05
字體:
來源:轉載
供稿:網友

------- android培訓、java培訓、期待與您交流! ----------

 

一、方法以及方法重載
  首先我們要明確什么是方法,方法其實就是一段經過封裝的有特定功能的代碼段。你可以用它來做特定的動作,比如在控制臺輸出一行字符串,給它兩個整數然后讓這段代碼替你將兩個整數進行相加。
  其次我們應該需要理解兩個概念。【形參】和【實參】?!拘螀ⅰ烤褪嵌x方法上的,用來接收外界傳給它的信息。在java中,你需要指定信息的類型,如果是整數就是int,如果是字符串類型就是String。字符串類型為什么是大寫字母開頭呢,因為字符串其實是一個類,在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

 二、構造方法及構造方法重載

  構造方法是用于完成對象屬性的初始化工作的。你在調用一個類的方法或者變量,如果不是類的靜態成員的話,你首先需要new一個對象,也就是根據這個類初始化一個對象。只要你new了一個對象,構造方法就運行了。如果你沒有在類文件中寫該類的構造方法,java編譯器會自動給這個類加上構造方法,該構造方法的形參為空切方法體也是空的。
  但是你自己主動在類中創建了一個該類的構造方法,那么java編譯器就不會再添加這個空的構造方法了。
  現在自己怎么在類中主動創建一個構造方法呢?
  先來段標準的代碼:
 
1  class Demo{2       public Demo(int i){}3   }

  可以看出:【1】構造方法的名字必須和類名完全一樣。因為java是區分大小寫的,所以大小寫也不能寫錯。

       【2】構造函數沒有返回值,也不能寫void。

  我們是無法像調用類其他成員方法一樣調用類的構造構造方法的。構造方法的運行是通過new關鍵字創建一個對象的時候,java會自動調用它為對象進行初始化。

  構造函數的重載其實跟方法重載差不多,也是在同一個類中因構造函數的形參類型和個數不同構成了重載。new該對象的時候,根據new class()括號中的參數類型和個數不同,調用不同的構造函數。一個類中不同的構造函數之間是可以互相調用的。也就是只要能遵循初始化一個對象只能一開始就初始化,且只能一次的原則就可以了。

  我們如果在一個構造方法中調用另一個構造方法,那么可以使用this()的方式,this()括號中的參數為構造方法的參數。也可以省略寫。從用this可以看出,構造函數不是類的靜態成員。

  對構造方法進行調用時,對new的使用特點:

    【1】調用時,后面的小括號()表示構造方法的參數列表,如果構造方法不接收參數,那么小括號可以為空;
    【2】如果構造方法接收參數,那么小括號中的實際參數就需要和構造方法定義中的形式參數保持一致(一致條件為:參數數量一致、參數類型一致、按相應的順序排列逐一賦值)。
  下面是完整的代碼:
 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 }    

  這個例子就把多態用途展現得很充分了。其中定義了一個方法,只要拋入的是動物類型,我就會調用其吃的方法。拋入狗就會啃骨頭,拋入貓就會吃魚。但是要注意的是,這個方法不能含有直接調用動物類型非公有的方法,也就是抽象類中不存在的方法。否則就會出錯誤。就好像拋入貓,就不能在方法中調用其看家的方法,否則就會出錯,即使是狗也不行,因為動物類型沒有這個共性的方法,你要調用,你必須強制轉型成狗的類型。這個時候你就可以調用看家的方法了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国产中文字幕| 亚洲欧美日韩国产精品| 中文字幕亚洲字幕| 欧美黑人一级爽快片淫片高清| 欧美激情精品久久久久久大尺度| 国产精品视频久久| 亚洲自拍小视频免费观看| 亚洲成人动漫在线播放| 美女999久久久精品视频| 欧美精品18videosex性欧美| 精品少妇一区二区30p| 97精品在线视频| 久久中文精品视频| 亚洲欧美另类国产| 国产视频在线一区二区| 国产精品男女猛烈高潮激情| 成年无码av片在线| 成人欧美一区二区三区黑人| 久久久久久久激情视频| 在线看日韩欧美| 国产九九精品视频| 欧美日韩久久久久| 毛片精品免费在线观看| 亚洲午夜久久久久久久| 国产精品成人在线| 亚洲男人天堂2024| 亚洲人成电影网| 欧美高清无遮挡| 欧美视频免费在线观看| 成人a在线视频| 国产精品三级网站| 欧美精品久久久久久久久| 高清在线视频日韩欧美| 欧美网站在线观看| 久久精品91久久香蕉加勒比| 欧洲一区二区视频| 中文字幕欧美精品在线| 亚洲一区999| 欧美在线视频免费| 国产主播喷水一区二区| 国产一区二区三区视频免费| 成人中文字幕+乱码+中文字幕| 日韩精品免费在线| 国产精品爱啪在线线免费观看| 国产精品自在线| 亚洲一级免费视频| 欧美大片免费观看在线观看网站推荐| 一本一本久久a久久精品牛牛影视| 中文字幕日韩视频| 久久久久国产精品www| 欧美精品电影免费在线观看| 欧美精品免费看| 国产精品对白刺激| 亚洲自拍偷拍一区| 久久精品视频在线播放| 欧美激情免费在线| 国产丝袜高跟一区| 日韩国产高清视频在线| 97在线观看免费高清| 欧美激情精品久久久久久大尺度| 色妞久久福利网| 欧美高清无遮挡| 国产精品av在线播放| 成人福利视频在线观看| 国产精品一区二区av影院萌芽| 午夜精品国产精品大乳美女| 亚洲国产精久久久久久| 国产精品∨欧美精品v日韩精品| 91chinesevideo永久地址| 91av中文字幕| 成人美女免费网站视频| 国产98色在线| 亚洲国产精品久久久久秋霞不卡| 久久91精品国产| 91香蕉国产在线观看| 亚洲精品91美女久久久久久久| 欧美精品免费播放| 91国产美女在线观看| 91精品国产色综合久久不卡98| 国产一区二区三区欧美| 国产精品一久久香蕉国产线看观看| 日韩午夜在线视频| 日韩有码在线播放| 日韩高清电影好看的电视剧电影| 国产精品视频自在线| 国产欧美日韩丝袜精品一区| 97精品免费视频| 国产v综合ⅴ日韩v欧美大片| 久久在线精品视频| 国产精品久久久久久久7电影| 亚洲欧洲偷拍精品| 国产精品午夜国产小视频| 久久久亚洲成人| 国产精品爽黄69天堂a| 久久成人这里只有精品| 久久久久久久亚洲精品| 成人欧美一区二区三区黑人| 精品国偷自产在线视频99| 国产精品永久免费视频| 欧美成人免费观看| 亚洲国产成人在线视频| 亚洲欧美综合图区| 在线播放亚洲激情| 国产精品视频26uuu| 欧美激情videoshd| 国产情人节一区| 欧美午夜精品在线| 精品国产自在精品国产浪潮| 欧美大片免费观看| 国产精品成人va在线观看| 久久最新资源网| 欧美成人免费播放| 亚洲精品影视在线观看| 国产精品视频一区二区三区四| 国产成人中文字幕| 亚洲欧美国产精品久久久久久久| 久久精品99久久久香蕉| 欧美一区二粉嫩精品国产一线天| 亚洲欧美日韩国产中文专区| 色综合久久88色综合天天看泰| 97视频在线观看亚洲| 精品久久中文字幕久久av| 亚洲色图五月天| 一本色道久久88亚洲综合88| 最近中文字幕日韩精品| 国产精品99蜜臀久久不卡二区| 亚洲欧洲午夜一线一品| 成人免费自拍视频| 国产一区二区美女视频| 色爱精品视频一区| 欧美天堂在线观看| 国内精品一区二区三区| 亚洲国产成人久久综合一区| 国产精品国产亚洲伊人久久| 中文字幕亚洲欧美一区二区三区| 久久综合伊人77777| 国产香蕉精品视频一区二区三区| 久久久免费观看| 欧美成人午夜视频| 成人黄色片网站| 国产成人精品最新| 国产91在线播放九色快色| 97热在线精品视频在线观看| 成人福利网站在线观看| 久久免费在线观看| 国产婷婷97碰碰久久人人蜜臀| 国产区精品在线观看| 国产精品一久久香蕉国产线看观看| 国产精品免费久久久| 中文字幕国产日韩| 亚洲国产精品久久精品怡红院| 亚洲欧美国产一区二区三区| 色哟哟亚洲精品一区二区| 久久免费国产精品1| 日韩电影大全免费观看2023年上| 亚洲免费电影在线观看| 国产亚洲a∨片在线观看| 欧美美最猛性xxxxxx| 国产视频精品自拍| 亚洲成成品网站| 欧美日韩人人澡狠狠躁视频| 日韩精品在线播放| 97在线观看免费高清| 国产欧美日韩丝袜精品一区|