不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦>知識大全>知識百科>百科知識>

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

時間: 映芳735 分享

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

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

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

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

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

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

  又一次執(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í)行結果不同的原因是其中的Math.random()這個類導致的,math.random()得到的數(shù)是0-1之間的隨機數(shù)。

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

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

  例如:計算兩個數(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;}

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

  重載和覆蓋的介紹

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

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

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

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

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

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

  重載與覆蓋的具體例子

  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:參數(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();

  }

  }

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

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

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

  下面舉個例子,例如:

  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方法和父類的方法參數(shù)不同,所以是重載。


猜你感興趣:

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

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

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

4.C/C++筆試題目

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

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

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

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

精選文章

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

    對于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 的兩個重要成員,它們之間存在什么樣的區(qū)別呢?下面學習啦小編帶你去了解了解一下。 1、 繼承和實現(xiàn)的區(qū)別 Hashta

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

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

537743