日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

1.8 方法重写

發(fā)布時(shí)間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.8 方法重写 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

  • 參數(shù)列表必須完全與被重寫的方法參數(shù)列表相同。
  • 返回的類型必須與被重寫的方法的返回類型相同(Java1.5 版本之前返回值類型必須一樣,之后的 Java版本放寬了限制,返回值類型必須小于或者等于父類方法的返回值類型)。
  • 訪問(wèn)權(quán)限不能比父類中被重寫方法的訪問(wèn)權(quán)限更低(public>protected>default>private)。
  • 重寫方法一定不能拋出新的檢査異常或者比被重寫方法聲明更加寬泛的檢査型異常。例如,父類的一個(gè)方法聲明了一個(gè)檢査異常 IOException,在重寫這個(gè)方法時(shí)就不能拋出 Exception,只能拋出 IOException 的子類異常,可以拋出非檢査異常。

另外還要注意以下幾條:

  • 重寫的方法可以使用 @Override 注解來(lái)標(biāo)識(shí)。
  • 父類的成員方法只能被它的子類重寫。
  • 聲明為 final 的方法不能被重寫。
  • 聲明為 static 的方法不能被重寫,但是能夠再次聲明。
  • 構(gòu)造方法不能被重寫。
  • 子類和父類在同一個(gè)包中時(shí),子類可以重寫父類的所有方法,除了聲明為 private 和 final 的方法。
  • 子類和父類不在同一個(gè)包中時(shí),子類只能重寫父類的聲明為 public 和 protected 的非 final 方法。
  • 如果不能繼承一個(gè)方法,則不能重寫這個(gè)方法。

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

下面編寫 Java 程序,在父類 Animal 中定義 getInfo() 方法,并在子類 Cat 中重寫該方法, 實(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() {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() 方法,即重寫了父類中的 getInfo() 方法。

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

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

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

總結(jié)

以上是生活随笔為你收集整理的1.8 方法重写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。