• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>百科知識(shí)>

    重載和覆蓋的區(qū)別都有哪些

    時(shí)間: 映芳735 分享

      重載和覆蓋是多態(tài)性的兩大主要表現(xiàn),學(xué)習(xí)代碼的朋友對(duì)此可能會(huì)有所了解,但是可能理解不深,下面是小編帶來的關(guān)于重載和覆蓋的區(qū)別的內(nèi)容,歡迎大家閱讀!

      重載和覆蓋的區(qū)別

      在同一個(gè)類中方法成員的名稱相同,但參數(shù)的類型和個(gè)數(shù)不同,這稱為重載。

      在存在繼承關(guān)系的兩個(gè)話,子類與父類的方法成員名稱相同、參數(shù)的類型和個(gè)數(shù)相同的話,子類的方法覆蓋父類的方法,這稱為覆蓋。

      下面舉個(gè)例子說明一下。例如:

      class Shape {

      void draw() {}

      void erase() {}

      }

      class Circle extends Shape {

      void draw() {

      System.out.println("Circle.draw()");

      }

      void erase() {

      System.out.println("Circle.erase()"); }

      }

      class Square extends Shape {

      void draw() {

      System.out.println("Square.draw()");

      }

      void erase() {

      System.out.println("Square.erase()");

      }

      }

      class Triangle extends Shape {

      void draw() {

      System.out.println("Triangle.draw()");

      }

      void erase() {

      System.out.println("Triangle.erase()");

      }

      }

      public class Test {

      public static Shape randShape() {

      switch((int)(Math.random() * 3)) {

      default:

      case 0: return new Circle();

      case 1: return new Square();

      case 2: return new Triangle();

      } }

      public static void main(String[] args) {

      Shape[] s = new Shape[9];

      for(int i = 0; i < s.length; i++)

      s[i] = randShape();

      for(int i = 0; i < s.length; i++)

      s[i].draw();

      }

      }

      輸出結(jié)果

      Triangle.draw()

      Circle.draw()

      Triangle.draw()

      Triangle.draw()

      Triangle.draw()

      Square.draw()

      Square.draw()

      Triangle.draw()

      Circle.draw()

      Triangle.erase()

      Circle.erase()

      Triangle.erase()

      Triangle.erase()

      Triangle.erase()

      Square.erase()

      Square.erase()

      Triangle.erase()

      Circle.erase()

      Press any key to continue...

      又一次執(zhí)行

      Triangle.draw()

      Triangle.draw()

      Circle.draw()

      Circle.draw()

      Circle.draw()

      Triangle.draw()

      Triangle.draw()

      Square.draw()

      Circle.draw()

      Triangle.erase()

      Triangle.erase()

      Circle.erase()

      Circle.erase()

      Circle.erase()

      Triangle.erase()

      Triangle.erase()

      Square.erase()

      Circle.erase()

      Press any key to continue...

      兩次執(zhí)行結(jié)果不同的原因是其中的Math.random()這個(gè)類導(dǎo)致的,math.random()得到的數(shù)是0-1之間的隨機(jī)數(shù)。

      不過,最重要的一點(diǎn)區(qū)別是:通過方法重載進(jìn)而實(shí)現(xiàn)對(duì)象的多態(tài)性。

      方法重載是指功能相同的多個(gè)方法使用同一個(gè)方法名。同名的多個(gè)方法的參數(shù)要有所不同,即在參數(shù)類型,參數(shù)個(gè)數(shù)和參數(shù)順序上要有所區(qū)別,以便作為選擇某個(gè)方法的根據(jù)。通常只有功能相同的方法進(jìn)行重載才有意義。

      例如:計(jì)算兩個(gè)數(shù)之和的重載方法定義如下:

      int add(int i,int j)

      {retrun i+j;}

      float add(float i,float j)

      {retrun i+j;}

      double add(double i,double j)

      {retrun i+j;}

      重載方法的選擇通常是在編譯時(shí)進(jìn)行。系統(tǒng)根據(jù)不同的參數(shù)類型,個(gè)數(shù)或順序,尋找最佳匹配方法.方法類型不參與匹配。

      重載和覆蓋的介紹

      多態(tài)性也是面向?qū)ο蠓椒ǖ囊粋€(gè)重要特性.多態(tài)性是指在在程序中出現(xiàn)的"重名"現(xiàn)象,即在一個(gè)程序中相同的名字可以表示不同的實(shí)現(xiàn).

      在JAVA中,多態(tài)性主要表現(xiàn)在如下兩個(gè)方面:

      (1)方法重載.通常指在同一個(gè)類中,相同的方法名對(duì)應(yīng)著不同的方法實(shí)現(xiàn),但是方法的參數(shù)不同.

      (2)成員覆蓋.通常指在不同類(父類和子類)中,允許有相同的變量名,但是數(shù)據(jù)類型不同;也允許有相同的方法名,但是對(duì)應(yīng)的方法實(shí)現(xiàn)不同.

      在重載的情況下,同一類中具有相同的名字的方法.如何選擇它的方法體呢?不能使用類名來區(qū)分,通常采用不同的方法形參表,區(qū)分重載要求形參在類型,個(gè)數(shù)和順序的不同,在定義重載方法時(shí),應(yīng)在方法的形參的類型,個(gè)數(shù)和順序有所不同,以便在選擇時(shí)能夠區(qū)別開來.

      在覆蓋的情況下,同名的方法存在于不同的類中,在調(diào)用方法只要指明其方法所歸屬的類名就可以了.

      重載與覆蓋的具體例子

      public class Base{

      int a,b;

      public Base(int x,int y){

      a = x;

      b = y;

      }

      public int add(){

      return (a + b);

      }

      public void add(int x,int y){

      int z;

      z = x + y;

      }

      }

      上面這段代碼就是重載的三個(gè)特征 :

      1:方法名必須一樣 “add()“。

      2:返回類型可以不一樣 就象是 ”int “和”void“.

      3:參數(shù)可以不一樣 就是add() 和add(int x,int y)這樣的。

      public class Base{

      int x,y;

      public void add(){

      int z;

      z = x + y;

      }

      }

      public class Child extends Base{

      int x,y;

      public void add(){

      int z;

      z = x + y;

      }

      public static void main(string [] args){

      Base b = new Child();

      b.add();

      }

      }

      下面這個(gè)例子就是重寫,他實(shí)現(xiàn)了多態(tài)。

      重寫的要求是,方法名必須一樣,返回類型必須一樣,傳入的參數(shù)必須一樣。

      在main函數(shù)中定義父類的對(duì)象,但是用子類去實(shí)例化他,這樣就可以通過父類的對(duì)象調(diào)用到子類的方法。

      下面舉個(gè)例子,例如:

      public class Parent {

      public int addValue( int a, int b) {

      int s;s = a+b;return s;

      }

      }

      class Child extends Parent {

      }

      Which methods can be added into class Child?

      a int addValue( int a, int b ){// do something...}

      b public void addValue (){// do something...}

      c public int addValue( int a ){// do something...}

      d public int addValue( int a, int b )throws MyException {//do something...}

      答案為B.C

      解釋1:

      a是覆蓋,b ,c是重載。

      a的問題出在訪問權(quán)限上,如果換成public也是可以的。

      d是異常的問題。

      解釋2:

      a的訪問權(quán)限小于父類,所以錯(cuò)誤,d是異常錯(cuò)誤,b和c中的addValue方法和父類的方法參數(shù)不同,所以是重載。


    猜你感興趣:

    1.亞信科技面試題及參考答案

    2.C++基礎(chǔ)筆試題及答案

    3.重載和覆蓋的區(qū)別

    4.C/C++筆試題目

    5.Java中覆蓋和重載的區(qū)別

    6.java中重寫和重載的區(qū)別

    重載和覆蓋的區(qū)別都有哪些

    重載和覆蓋是多態(tài)性的兩大主要表現(xiàn),學(xué)習(xí)代碼的朋友對(duì)此可能會(huì)有所了解,但是可能理解不深,下面是小編帶來的關(guān)于重載和覆蓋的區(qū)別的內(nèi)容,歡迎大家閱讀! 重載和覆蓋的區(qū)別 在同一個(gè)類中方法成員的名稱相同,但參數(shù)的類型和個(gè)數(shù)不同,這
    推薦度:
    點(diǎn)擊下載文檔文檔為doc格式

    精選文章

    • Java中覆蓋和重載的區(qū)別
      Java中覆蓋和重載的區(qū)別

      對(duì)于Java中重載和覆蓋的概念,很多人到現(xiàn)在都是搞不清楚,下面小編舉例給大家講講這兩者的區(qū)別。 一、覆蓋 1 override可以翻譯為覆蓋,從字面就可以知道

    • 重寫和重載的區(qū)別_重寫和重載的不同之處
      重寫和重載的區(qū)別_重寫和重載的不同之處

      在Java中,重寫和重載都是Java多態(tài)性的兩種不同表現(xiàn)形式,這兩者之間的區(qū)別是人們好奇的。下面,小編跟大家講一講重寫和重載的不同之處吧。 重寫的定

    • Java中HashMap和Hashtable之間的區(qū)別
      Java中HashMap和Hashtable之間的區(qū)別

      HashMap和Hashtable是 Java Collection Framework 的兩個(gè)重要成員,它們之間存在什么樣的區(qū)別呢?下面學(xué)習(xí)啦小編帶你去了解了解一下。 1、 繼承和實(shí)現(xiàn)的區(qū)別 Hashta

    • Java中抽象類與接口的區(qū)別
      Java中抽象類與接口的區(qū)別

      抽象類和接口是Java語言中對(duì)于抽象類定義進(jìn)行支持的兩種機(jī)制,正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Α3橄箢惡徒涌谥g在對(duì)于

    537743 主站蜘蛛池模板: 日韩欧美一区二区三区免费观看| 疯狂做受xxxx高潮不断| 小雄和三个护士阅读| 免费人成在线观看69式小视频| h片在线播放免费高清| 毛片毛片毛片毛片出来毛片| 国产精品久久久久久搜索| 久久综合久久美利坚合众国| 色吊丝中文字幕| 女人把腿给男人桶视频app| 亚洲春色第一页| 黄色一级视频免费观看| 成人做受视频试看60秒| 亚洲狠狠婷婷综合久久久久| 欧美jizz40性欧美| 扁豆传媒视频免费观看| 亚洲视频手机在线| 欧美jizz18欧美| 成人国产网站v片免费观看| 亚洲精品第一国产综合野| 久久久精品久久久久三级| 成人性生交大片免费看| 亚洲码欧美码一区二区三区| 国产极品粉嫩交性大片| 成人午夜性视频欧美成人| 亚洲欧美电影一区二区| 麻豆成人久久精品二区三区免费| 快一点使劲c我在线观看| 亚洲日本视频在线观看| 荡货把腿给我打开视频| 在镜子里看我怎么c你的| 久久精品视频2| 男人扒开女人下身添免费| 国产欧美va欧美va香蕉在线| 中国xxxxx高清免费看视频| 欧美日韩第一区| 国产不卡一卡2卡三卡4卡5卡在线| chinesefemdom444| 日韩精品高清在线| 免费在线观看视频a| 国产福利你懂的|