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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象重写(override)与重载(overload)区别

發布時間:2023/12/13 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象重写(override)与重载(overload)区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、重寫(override)

override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用于子類在繼承父類時,重寫(重新實現)父類中的方法。

重寫(覆蓋)的規則:

?? 1、重寫方法的參數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.

?? 2、重寫方法的訪問修飾符一定要大于被重寫方法的訪問修飾符(public>protected>default>private)。

?? 3、重寫的方法的返回值必須和被重寫的方法的返回一致;

?? 4、重寫的方法所拋出的異常必須和被重寫方法的所拋出的異常一致,或者是其子類;

?? 5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,并沒s有對其進行重寫。

?? 6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。

?

override就是子類將父類的方法重新實現了一遍。 new就是說這個方法就是子類自己的,跟父類沒有任何繼承關系關系,僅僅是重名 public class A{public virtual string Function(){return "1";}}public class B : A{public override string Function(){return "2";}}public class C : A{public new string Function(){return "3";}}public class JustForTest{public void DoTest(){B b = new B();C c = new C();Console.WriteLine(b.Function());Console.WriteLine(c.Function());Console.WriteLine((b as A).Function());//這兩個就體現出來了,B還是調用自己,返回2Console.WriteLine((c as A).Function());//C調用的是基類,返回0 }} View Code

?

?二、overload是重載,一般是用于在一個類內實現若干重載的方法,這些方法的名稱相同而參數形式不同。

重載的規則:

?? 1、在使用重載時只能通過相同的方法名、不同的參數形式實現。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣);

?? 2、不能通過訪問權限、返回類型、拋出的異常進行重載;

?? 3、方法的異常類型和數目不會對重載造成影響;

多態的概念比較復雜,有多種意義的多態,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多態則是父類使用子類的方法。

一般,我們使用多態是為了避免在父類里大量重載引起代碼臃腫且難于維護。

舉個例子:

?

?

public class Shape{public static void main(String[] args){Triangle tri = new Triangle();System.out.println("Triangle is a type of shape? " + tri.isShape());// 繼承 Shape shape = new Triangle();System.out.println("My shape has " + shape.getSides() + " sides."); // 多態 Rectangle Rec = new Rectangle();Shape shape2 = Rec;System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重載 }public boolean isShape(){return true;}public int getSides(){return 0 ;}public int getSides(Triangle tri){ //重載return 3 ;}public int getSides(Rectangle rec){ //重載return 4 ;}}class Triangle extends Shape{public int getSides() { //重寫,實現多態return 3;}}class Rectangle extends Shape{public int getSides(int i) { //重載return i;}} View Code

?

注意Triangle類的方法是重寫,而Rectangle類的方法是重載。對兩者比較,可以發現多態對重載的優點:

如果用重載,則在父類里要對應每一個子類都重載一個取得邊數的方法;

如果用多態,則父類只提供取得邊數的接口,至于取得哪個形狀的邊數,怎樣取得,在子類里各自實現(重寫)。

?

轉載于:https://www.cnblogs.com/Tanghongchang/p/7140533.html

總結

以上是生活随笔為你收集整理的面向对象重写(override)与重载(overload)区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。