华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java基礎(chǔ) >> 文章內(nèi)容

Java方法重寫(xiě)

來(lái)源:中華考試網(wǎng)  [2020年11月24日]  【

  在子類中如果創(chuàng)建了一個(gè)與父類中相同名稱、相同返回值類型、相同參數(shù)列表的方法,只是方法體中的實(shí)現(xiàn)不同,以實(shí)現(xiàn)不同于父類的功能,這種方式被稱為方法重寫(xiě)(override),又稱為方法覆蓋。當(dāng)父類中的方法無(wú)法滿足子類需求或子類具有特有功能的時(shí)候,需要方法重寫(xiě)。

  子類可以根據(jù)需要,定義特定于自己的行為。既沿襲了父類的功能名稱,又根據(jù)子類的需要重新實(shí)現(xiàn)父類方法,從而進(jìn)行擴(kuò)展增強(qiáng)。

  在重寫(xiě)方法時(shí),需要遵循下面的規(guī)則:

  參數(shù)列表必 須完全與被重寫(xiě)的方法參數(shù)列表相同。

  返回的類型必 須與被重寫(xiě)的方法的返回類型相同(Java1.5 版本之前返回值類型必 須一樣,之后的 Java 版本放寬了限制,返回值類型必 須小于或者等于父類方法的返回值類型)。

  訪問(wèn)權(quán)限不能比父類中被重寫(xiě)方法的訪問(wèn)權(quán)限更低(public>protected>default>private)。

  重寫(xiě)方法一 定不能拋出新的檢査異常或者比被重寫(xiě)方法聲明更加寬泛的檢査型異常。例如,父類的一個(gè)方法聲明了一個(gè)檢査異常 IOException,在重寫(xiě)這個(gè)方法時(shí)就不能拋出 Exception,只能拋出 IOException 的子類異常,可以拋出非檢査異常。

  另外還要注意以下幾條:

  重寫(xiě)的方法可以使用 @Override 注解來(lái)標(biāo)識(shí)。

  父類的成員方法只能被它的子類重寫(xiě)。

  聲明為 final 的方法不能被重寫(xiě)。

  聲明為 static 的方法不能被重寫(xiě),但是能夠再次聲明。

  構(gòu)造方法不能被重寫(xiě)。

  子類和父類在同一個(gè)包中時(shí),子類可以重寫(xiě)父類的所 有方法,除了聲明為 private 和 final 的方法。

  子類和父類不在同一個(gè)包中時(shí),子類只能重寫(xiě)父類的聲明為 public 和 protected 的非 final 方法。

  如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法。

  例 1

  每種動(dòng)物都有名字和年齡屬性,但是喜歡吃的食物是不同的,比如狗喜歡吃骨頭、貓喜歡吃魚(yú)等,因此每種動(dòng)物的介紹方式是不一樣的。

  下面編寫(xiě) Java 程序,在父類 Animal 中定義 getInfo() 方法,并在子類 Cat 中重寫(xiě)該方法, 實(shí)現(xiàn)貓的介紹方式。父類 Animal 的代碼如下:

  public class Animal {

  public String name; // 名字

  public int age; // 年齡

  public Animal(String name, int age) {

  this.name = name;

  this.age = age;

  }

  public String getInfo() {

  填寫(xiě)下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽(tīng)java課程!害怕學(xué)不會(huì)?助教陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國(guó)推薦就業(yè)!

預(yù)約申請(qǐng)免費(fèi)聽(tīng)java課程

  • 地區(qū):
  • 姓名:
  • 手機(jī):

  return "我叫" + name + ",今年" + age + "歲了。";

  }

  }

  子類 Cat 的代碼如下:

  public class Cat extends Animal {

  private String hobby;

  public Cat(String name, int age, String hobby) {

  super(name, age);

  this.hobby = hobby;

  }

  public String getInfo() {

  return "喵!大家好!我叫" + this.name + ",我今年" + this.age + "歲了,我愛(ài)吃" + hobby + "。";

  }

  public static void main(String[] args) {

  Animal animal = new Cat("小白", 2, "魚(yú)");

  System.out.println(animal.getInfo());

  }

  }

  如上述代碼,在 Animal 類中定義了一個(gè)返回值類型為 String、名稱為 getInfo() 的方法,而 Cat 類繼承自該類,因此 Cat 類同樣含有與 Animal 類中相同的 getInfo() 方法。但是我們?cè)?Cat 類中又重新定義了一個(gè) getInfo() 方法,即重寫(xiě)了父類中的 getInfo() 方法。

  在 main() 方法中,創(chuàng)建了 Cat 類的對(duì)象 animal,并調(diào)用了 getInfo() 方法。輸出的結(jié)果如下:

  喵!大家好!我叫小白,我今年2歲了,我愛(ài)吃魚(yú)。

  如果子類中創(chuàng)建了一個(gè)成員變量,而該變量的類型和名稱都與父類中的同名成員變量相同,我們則稱作變量隱藏。

責(zé)編:fushihao

上一篇:Javasuper關(guān)鍵字詳解

下一篇: 沒(méi)有了

  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語(yǔ)考試
  • 學(xué)歷考試
正镶白旗| 双峰县| 曲松县| 安远县| 塔城市| 布尔津县| 大港区| 龙胜| 牟定县| 通海县| 宜良县| 水城县| 黄冈市| 杭州市| 汉川市| 湖北省| 新邵县| 台中县| 剑阁县| 泰宁县| 德阳市| 鄂伦春自治旗| 长兴县| 澄迈县| 台中市| 右玉县| 鄂尔多斯市| 修水县| 修武县| 龙州县| 水富县| 云梦县| 奉化市| 栾城县| 波密县| 丹巴县| 淮滨县| 济南市| 保山市| 锡林郭勒盟| 堆龙德庆县|