9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>知識大全>知識百科>百科知識>

重載和覆蓋的區別都有哪些

時間: 映芳735 分享

  重載和覆蓋是多態性的兩大主要表現,學習代碼的朋友對此可能會有所了解,但是可能理解不深,下面是小編帶來的關于重載和覆蓋的區別的內容,歡迎大家閱讀!

  重載和覆蓋的區別

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

  在存在繼承關系的兩個話,子類與父類的方法成員名稱相同、參數的類型和個數相同的話,子類的方法覆蓋父類的方法,這稱為覆蓋。

  下面舉個例子說明一下。例如:

  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();

  }

  }

  輸出結果

  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...

  又一次執行

  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...

  兩次執行結果不同的原因是其中的Math.random()這個類導致的,math.random()得到的數是0-1之間的隨機數。

  不過,最重要的一點區別是:通過方法重載進而實現對象的多態性。

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

  例如:計算兩個數之和的重載方法定義如下:

  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;}

  重載方法的選擇通常是在編譯時進行。系統根據不同的參數類型,個數或順序,尋找最佳匹配方法.方法類型不參與匹配。

  重載和覆蓋的介紹

  多態性也是面向對象方法的一個重要特性.多態性是指在在程序中出現的"重名"現象,即在一個程序中相同的名字可以表示不同的實現.

  在JAVA中,多態性主要表現在如下兩個方面:

  (1)方法重載.通常指在同一個類中,相同的方法名對應著不同的方法實現,但是方法的參數不同.

  (2)成員覆蓋.通常指在不同類(父類和子類)中,允許有相同的變量名,但是數據類型不同;也允許有相同的方法名,但是對應的方法實現不同.

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

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

  重載與覆蓋的具體例子

  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;

  }

  }

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

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

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

  3:參數可以不一樣 就是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();

  }

  }

  下面這個例子就是重寫,他實現了多態。

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

  在main函數中定義父類的對象,但是用子類去實例化他,這樣就可以通過父類的對象調用到子類的方法。

  下面舉個例子,例如:

  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的問題出在訪問權限上,如果換成public也是可以的。

  d是異常的問題。

  解釋2:

  a的訪問權限小于父類,所以錯誤,d是異常錯誤,b和c中的addValue方法和父類的方法參數不同,所以是重載。


猜你感興趣:

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

2.C++基礎筆試題及答案

3.重載和覆蓋的區別

4.C/C++筆試題目

5.Java中覆蓋和重載的區別

6.java中重寫和重載的區別

重載和覆蓋的區別都有哪些

重載和覆蓋是多態性的兩大主要表現,學習代碼的朋友對此可能會有所了解,但是可能理解不深,下面是小編帶來的關于重載和覆蓋的區別的內容,歡迎大家閱讀! 重載和覆蓋的區別 在同一個類中方法成員的名稱相同,但參數的類型和個數不同,這
推薦度:
點擊下載文檔文檔為doc格式

精選文章

  • Java中覆蓋和重載的區別
    Java中覆蓋和重載的區別

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

  • 重寫和重載的區別_重寫和重載的不同之處
    重寫和重載的區別_重寫和重載的不同之處

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

  • Java中HashMap和Hashtable之間的區別
    Java中HashMap和Hashtable之間的區別

    HashMap和Hashtable是 Java Collection Framework 的兩個重要成員,它們之間存在什么樣的區別呢?下面學習啦小編帶你去了解了解一下。 1、 繼承和實現的區別 Hashta

  • Java中抽象類與接口的區別
    Java中抽象類與接口的區別

    抽象類和接口是Java語言中對于抽象類定義進行支持的兩種機制,正是由于這兩種機制的存在,才賦予了Java強大的面向對象能力。抽象類和接口之間在對于

537743 主站蜘蛛池模板: 激情五月日韩中文字幕| 国内外成人综合免费视频| 深田えいみ禁欲后被隔壁人妻 | 四虎库影成人在线播放| 国产精品一品二区三区日韩| 国产精品中文字幕免费| 国产精品久久久久婷婷五月| 久久av色欲av久久蜜桃网| 亚洲欧洲日韩国内精品| 丰满的少妇被猛烈进入白浆 | 高潮迭起av乳颜射后入| 玩两个丰满老熟女久久网| 国产色悠悠在线免费观看| 国语精品自产拍在线观看网站| 女人与公狍交酡女免费| 成人午夜免费无码视频在线观看| 亚洲老熟女乱女一区二区| 国产亚洲精品成人aa片新蒲金| 日韩有码中文字幕av| 国产成人A区在线观看视频| 米奇亚洲国产精品思久久| 国产成人精品视频不卡| 伊人久久大香线蕉aⅴ色| 国产一区二区三区不卡在线看| 美腿丝袜亚洲综合在线视频| 亚洲一二三区精品美妇| 天天操夜夜操| 潘金莲高清dvd碟片| 日韩伦理片一区二区三区| 国产精品VA尤物在线观看| 色综合视频一区二区三区| 欧美高清freexxxx性| 亚洲天堂av日韩精品| 国精品无码一区二区三区在线蜜臀| 久久91综合国产91久久精品| 日韩一本不卡一区二区三区| 91中文字幕一区二区| 国产日韩精品欧美一区灰| 亚洲男人第一无码av网| 日韩人妻精品中文字幕| 亚洲AV日韩AV永久无码下载|