1樓:匿名使用者
其實很本質的區別就是看函式特徵:覆寫(override)的兩個函式的函式特徵相同,過載(overload)的兩個函式的函式名雖然相同,但函式特徵不同。
函式特徵包括函式名,引數的型別和個數。
override 是在繼承的時候,如果你寫的函式與要繼承的函式函式特徵相同,那麼,加上這個關鍵字,在使用這個子類的這個函式的時候就看不見父類(或超類)的函式了,它被覆蓋掉了。
比如:derived繼承了base,base裡面有void a(int a)
那麼如果你derived裡面覺得a寫得不好或不適合這個類,你想重新再寫一遍a裡的**,那麼就寫override void a(int a)這樣,原來的那個函式就被你新寫的這個覆蓋掉了。
overload 是過載,就是說函式名相同,函式特徵不同,系統會根據你提供的引數來調相應的函式。
比如:void a(int a)和void a(int a,int b)
如果你用的是a(1)那麼調的是第一個,如果是a(1,1)那麼調的是第二個。
2樓:匿名使用者
區別:方法過載:就是在同一個類中,方法的名字相同,但引數個數、引數的型別或返回值型別不同!
方法重寫:它是指子類和父類的關係,子類重寫了父類的方法,但方法名、引數型別、引數個數必須相同!
j**a 過載和重寫的區別
3樓:匿名使用者
1.定義區別:
①過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼叫的時候根據函式的引數來區別不同的函式。
②覆蓋(也叫重寫)是指在派生類中重新對基類中的虛擬函式(注意是虛擬函式)重新實現。即函式名和引數都一樣,只是函式的實現體不一樣。
2.類的關係區別
覆蓋是子類和父類之間的關係,是垂直關係;過載是同一個類中方法之間的關係,是水平關係。
3.產生方法區別
覆蓋只能由一個方法或只能由一對方法產生關係;過載是多個方法之間的關係。
4.引數列表要求區別
覆蓋要求引數列表相同;過載要求引數列表不同。
5.呼叫方法區別
覆蓋關係中,呼叫方法體是根據物件的型別來決定;而過載關係是根據呼叫時的實參表與形參表來選擇方法體的。
擴充套件資料
方法的重寫:
1、在子類中可以根據需要對從基類中繼承來的方法進行重寫。
2、重寫的方法和被重寫的方法必須具有相同方法名稱、引數列表和返回型別。(注:返回值可以為父類中返回值的子型別.引數若為子類,則不是重寫是過載)
3、重寫方法不能使用比被重寫的方法更嚴格的訪問許可權。
4. 重寫方法不能宣告丟擲比被重寫方法範圍更大的異常型別。
總結:重寫是子類對所繼承父類相同方法的一種更改,這個更改需要遵循格式按照父類的格式,訪問許可權,丟擲異常等等,都在父類方法控制範圍內,內部具體實現可以實現不同的效果。
4樓:匿名使用者
重寫的主要優點是能夠定義某個子類特有的特徵:
如:public class father
}public class son extends father
}這也叫做多型性,重寫方法只能存在於具有繼承關係中,重寫方法只能重寫父類非私有的方法,
當上例中 father類 speak()方法被private時,son類不能重寫 father類 speak()方法,此時son類 speak()方法相當與在son類中定義的一個speak()方法.
father類 speak()方法一但被final時,無論該方法被public,protected及預設所修飾時,son類根本不能重寫 father類 speak()方法,試圖編譯**時,編譯器會報錯.例:
public class father
}public class son extends father
}//編譯器會報錯.
father類 speak()方法被時預設修飾時,只能在同一包中,被其子類被重些,如果不在同一包則不能重寫.
father類 speak()方法被時protoeted時,不僅在同一包中,被其子類被重些,還可以不同包的子類重寫.
重寫方法的規則:
1.引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.
2.返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載.
3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常.例如,
父類的一個方法申明瞭一個檢查異常ioexception,在重寫這個方法是就不能丟擲exception,只能丟擲ioexception的子類異常,可以丟擲非檢查異常.
而過載的規則:
1.必須具有不同的引數列表;
2.可以有不同的返回型別,只要引數列表不同就可以了;
3.可以有不同的訪問修飾符;
4.可以丟擲不同的異常;
重寫和過載的區別在於:
重寫多型性起作用,對呼叫被過載過的方法可以大大減少**的輸入量,同一個方法名只要往裡面傳遞不同的引數就可以擁有不同的功能或返回值.
用好重寫和過載可以設計一個結構清晰而簡潔的類,可以說重寫和過載在編寫**過程中的作用非同一般.
5樓:藏澤雨泰朝
重寫是子類的方法覆蓋父類的方法,要求方法名和引數都相同
過載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是引數卻不相同,方法體也不相同,最常見的過載的例子就是類的建構函式,可以參考api幫助文件看看類的構造方法
6樓:商靜雲敬煦
重寫:子類重新把父類有的方法重寫,包括名字,引數和引數個數以及引數型別
好處:沒什麼好處,就是父類實現不了的讓子類來實現過載:是指在同一個類中的幾個同名不同參的方法好處:實現多型技術,一樣的方法根據引數有不一樣的實現
7樓:
過載是多個檔案具有相同的名字,只是引數列表不同無參的a() 有參的a(string str)重寫是就只有這一個方法,每次寫它是對他驚醒一次覆蓋舊的a() 新的 a()
8樓:淺秋的古蓮
重寫就是再寫一遍,過載就是再多一個。
重寫:父類裡有,子類再照貓畫虎寫一個。
過載:自己類裡面有,覺得不夠再寫一個。
9樓:
重寫和過載 其實很類似
過載是過載可以直接用的方法
而重寫一般是重寫抽象方法.........
其實在日常中..根本沒去注重這兩個概念的區別...
10樓:匿名使用者
方法寫重就等於覆蓋一樣,簡單的說,方法名和引數都一樣!
在j**a中,方法重寫和方法過載有什麼區別?
11樓:匿名使用者
方法過載:就是在同一個類中,方法的名字相同,但引數個數、引數的型別或返回值型別不同!
方法重寫:它是指子類和父類的關係,子類重寫了父類的方法,但方法名、引數型別、引數個數必須相同!
是不是很容易理解啊!
12樓:書含雲
推薦回答有問題,方法過載是同名,不同參,與返回型別無關。
13樓:雙子傑克斯派洛
過載是方法名相同,引數個數、引數型別不同,與返回值型別和修飾詞無關
14樓:我是勇敢的小草
萌新一定要注意,與返回值無關!!!!!! 但是引數列表一定是不同的,順序不同也算!!!
方法重寫和方法過載的區別是什麼
15樓:匿名使用者
1.重寫必須繼承,過載不用。
2.重寫的方法名,引數數目相同,引數型別相容,過載的方法名相同,引數列表不同。
3.重寫的方法修飾符大於等於父類的方法,過載和修飾符無關。
4.重寫不可以丟擲父類沒有丟擲的一般異常,可以丟擲執行時異常
方法過載和重寫的區別
16樓:裱叔叔
方法過載:
方法過載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的引數的型別或引數的個數。方法過載通常用於建立完成一組任務相似但引數的型別或引數的個數不同的方法。
重寫:在c#中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
重寫與過載的區別在於:
重寫多型性起作用,對呼叫被過載過的方法可以大大減少**的輸入量,同一個方法名只要往裡面傳遞不同的引數就可以擁有不同的功能或返回值。用好重寫和過載可以設計一個結構清晰而簡潔的類,可以說重寫和過載在編寫**過程中的作用非同一般.
擴充套件資料:
c語言:
c#旨在設計成為一種「簡單、現代、通用」,以及物件導向的程式設計語言,此種語言的實現,應提供對於以下軟體工程要素的支援:強型別檢查、陣列維度檢查、未初始化的變數引用檢測、自動垃圾收集(garbage collection,指一種自動記憶體釋放技術)。軟體必須做到強大、持久,並具有較強的程式設計生產力。
為使程式設計師容易遷移到這種語言,源**的可移植性十分重要,尤其是對於那些已熟悉c和c++的程式設計師而言。對國際化的支援非常重要。c#適合為獨立和嵌入式的系統編寫程式,從使用複雜作業系統的大型系統到特定應用的小型系統均適用。
17樓:女神向善
兩者的區別是條件不同:
過載的條件:
1.必須在同一個類中
2.方法名必須相同
3.引數列表不能相同。
重寫的條件:
1. 在不同的類中
2. 發生方法重寫的兩個方法返回值,方法名,引數列表必須完全一致
3. 子類丟擲的異常不能超過父類相應的方法丟擲的異常
4. 子類方法的訪問級別不能低於父類相應方法的訪問級別(public,package,protected, private)
5.方法體不同 super()呼叫父類構造,super.只能呼叫父類的例項方法 this()呼叫該類的其他構造方法,this.
呼叫類的屬性,方法 如果父類有有參構造,子類必須定義構造方法。
擴充套件資料:
1、重寫方法的規則:
(1) 引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載。
(2)返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載。
(3)訪問修飾符的限制一定要大於被重寫方法的訪問修飾符。(public>protected>default>private)
(4)重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。
例如, 父類的一個方法申明瞭一個檢查異常ioexception,在重寫這個方法是就不能丟擲exception,只能丟擲ioexception的子類異常,可以丟擲非檢查異常.
2、過載方法的規則:
(1)必須具有不同的引數列表;
(2)可以有不同的返回型別,只要引數列表不同就可以了;
(3)可以有不同的訪問修飾符;
(4)可以丟擲不同的異常;
兩道程式設計師考試題 (類關係和方法重寫的難題)
至於1對多,多對多那不是類的關係而是實體關係屬於資料庫的 排除ef b對a是has a關係 排除c a對b有沒有關係的情況,即只例項a而不例項b 因此排除a g選項說反了。h選項壓根不正確。選項排除,a的方法是介面的申明,實現它就是實現不是重寫。bc都申明瞭final,無法重寫。de是e重寫d 我認...
init和onEnter方法的區別
init 和onenter 這倆個方法都是ccnode的方法。其區別如下 1.其被呼叫的順序是先init 後onenter 2.init 在類的初始化時只會呼叫一次。3.onenter在該類被載入場景的時候被呼叫,可能會發生多次。4.cclayer cclayer new mylayer 這種情況下...
比喻和比擬的區別比擬和比喻的區別方法
位望亭摩茶 比擬藉助豐富的想象,把物當 來寫,或把人當成物來寫,或把甲物當成乙物來寫,就是比擬。寫作時善用比擬,能啟發讀者想象,令文章更生動。比擬分為擬人和擬物。比擬離不開聯想和想象.比擬是根據本體事物和擬作事物之間的可擬性,藉助聯想和想象而形成的辭格,因此聯想是通向比擬的橋樑,想象是比擬的翅膀.比...