❶ 什麼是重載方法,什麼是覆蓋方法,主要區別
一、重載方法:方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個數選擇一個恰當的方法。
方法重載通常用於創建完成一組任務相似但參數的類型或參數的個數或參數的順序不同的方法。Java的方法重載,就是在類中可以創建多個方法,它們可以有相同的名字,但必須具有不同的參數,即或者是參數的個數不同,或者是參數的類型不同。
調用方法時通過傳遞給它們的不同個數和類型的參數,以及傳入參數的順序來決定具體使用哪個方法
二、覆蓋方法:在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想做一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
兩者的區別:
1、子類與父類的關系不同:覆蓋方法中的子類與父類之間是垂直關系;在重載方法中因為兩個方法在同一個類中,所以是不同方法之間的水平關系。
2、映射關系不同:覆蓋只能由一個方法,或只能由一對方法產生關系;在重載方法時,多個方法之間發生變化。
3、對於參數列表的需求不同:覆蓋要求參數列表相同;重載要求參數列表不同。
(1)java中什麼是方法重載擴展閱讀:
java的特點:
1、高性能
Java是一種先編譯後解釋的語言,所以它不如全編譯性語言快。但是有些情況下性能是很要緊的,為了支持這些情況,Java設計者製作了「及時」編譯程序,它能在運行時把Java位元組碼翻譯成特定CPU的機器代碼,也就是實現全編譯了。
Java位元組碼格式設計時考慮到這些「及時」編譯程序的需要,所以生成機器代碼的過程相當簡單,它能產生相當好的代碼。
2、多線索性
Java是多線索語言,它提供支持多線索的執行,能處理不同任務,使具有線索的程序設計很容易。Java的lang包提供一個Thread類,它支持開始線索、運行線索、停止線索和檢查線索狀態的方法。
Java的線索支持也包括一組同步原語。這些原語是基於監督程序和條件變數風范,由C.A.R.Haore開發的廣泛使用的同步化方案。用關鍵詞synchronized,程序員可以說明某些方法在一個類中不能並發地運行。這些方法在監督程序控制之下,確保變數維持在一個一致的狀態。
3、動態性
Java語言設計成適應於變化的環境,它是一個動態的語言。例如,Java中的類是根據需要載入的,甚至有些是通過網路獲取的。
參考資料來源:
網路-方法重載
網路-方法覆蓋
❷ java中為什麼要用方法重載
(1)重載的意義在於擴展父類的功能,如果有兩個類A和B,繼承C,那麼在C的方法只需要定義A和B相同的功能,而在各個子類中擴展子類具體的實現。
(2)方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個數選擇一個恰當的方法。方法重載通常用於創建完成一組任務相似但參數的類型或參數的個數不同的方法。
(3)Java的方法重載,就是在類中可以創建多個方法,它們可以有相同的名字,但必須具有不同的參數,即或者是參數的個數不同,或者是參數的類型不同。調用方法時通過傳遞給它們的不同個數和類型的參數來決定具體使用哪個方法。
❸ java中方法覆蓋和方法重載是什麼意思
Java中覆蓋和重載的區別如下:
override 可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了聲明,而在實現時,就需要實現介面聲明的所有方法。除了這個典型的用法以外,在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點:
1、覆蓋的方法的標志必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。
overload對來說可能比較熟悉,可以翻譯為重載,它是指可以定義一些名稱相同的方法,通過定義不同的輸入參數來區分這些方法,然後再調用時,VM就會根據不同的參數樣式,來選擇合適的方法執行。在使用重載要注意以下的幾點:
1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int));
2、不能通過訪問許可權、返回類型、拋出的異常進行重載;
3、方法的異常類型和數目不會對重載造成影響;
4、對於繼承來說,如果某一方法在父類中是訪問許可權是priavte,那麼就不能在子類對其進行重載,如果定義的話,也只是定義了一個新方法,而不會達到重載的效果。
下面是對override和overload的測試程序,其中注釋中的內容都是會產生編譯錯誤的代碼,將注釋去掉,看看在編譯時會產生什麼效果。
// 對overload測試的文件:OverloadTest.java
public class OverloadTest {
// 下面幾個方法用來驗證可以通過定義不同的參數類型和參數的數目進行方法重載。
public void fun(){
System.out.println("method fun in OverloadTest, no parameter");
}
public void fun(float f) {
System.out.println("method fun in OverloadTest, parameter type: float");
}
public void fun(int i){
System.out.println("method fun in OverloadTest, parameter type: int");
}
public void fun(int i1, int i2) {
System.out.println("method fun in OverloadTest, parameter type: int, int");
}
// 下面的兩個方法用來驗證可以通過定義不同的參數順序進行方法重載。
// 需要注意:這里的參數肯定不是相同的類型,否則的順序的先後就毫無意義。
public void fun1(int i, float f) {
System.out.println("method fun1 in OverloadTest, sequence of parameters is: int, float");
}
public void fun1(float f, int i) {
System.out.println("method fun1 in OverloadTest, sequence of parameters is: float, int");
}
// 下面的兩個方法用來驗證方法拋出的異常對於重載的影響.
// 無論是異常的類型還是異常的個數都不會對重載造成任何的影響。
public void fun2() throws TestException {
System.out.println("fun2 in OverloadTest, exception: TestException");
}
public void fun2(int i) throws TestException, TestException1 {
System.out.println("fun2 in OverloadTest, exception: TestException, TestException1");
}
public void fun2(float f) throws Exception {
System.out.println("fun2 in OverloadTest, exception: Exception");
}
// 不能通過拋出的異常類型來重載fun方法。
//public void fun(int i) throws Exception {
// System.out.println("method fun in OverloadTest, parameter type: int, exception: Exception");
//}
// 不能通過返回值重載fun方法。
//public boolean fun(int i) throws Exception {
// System.out.println("method fun in OverloadTest, parameter type: int, exception: Exception, return: boolean");
// return true;
//}
private void fun3() { }
// 不能通過不同的訪問許可權進行重載
public void fun3() { }
public static void main(String[] args) {
// 這里只是定義了OverloadTest的實例,所以test不會調用
// OverloadTest1中的方法。
OverloadTest test = new OverloadTest1();
// 這里定義了OverloadTest1的實例,因為OverloadTest1是OverloadTest
// 的子類,所以test1會調用OverloadTest中的方法。
OverloadTest1 test1 = new OverloadTest1();
try {
int i = 1, j = 2, m = 3;
// 這里不會調用OverloadTest1的fun方法
// test.fun(i, m, j);
test1.fun(i, j, m);
test1.fun();
// 這個調用不會執行,因為fun3()在OverloadTest中訪問許可權是priavte
//test1.fun3();
test1.fun3(i);
} catch(Exception e) { }
}
}
class OverloadTest1 extends OverloadTest{
// 在子類中重載fun
public void fun(int i, int m, int n) {
System.out.println("Overload fun1 in OverloadTest1, parameter type: int, int, int");
}
// 這個不是對父類中方法的重載,只是一個新的方法。
public void fun3(int i) {
System.out.println("fun2 in OverloadTest1");
}
}
// 對override測試的文件:OverrideTest.java
public class OverrideTest {
public void fun() throws TestException {
System.out.println("method fun in OverrideTest");
}
private void fun1() {
System.out.println("method fun1 in OverrideTest");
}
public static void main(String[] args) {
OverrideTest test = new OverrideTest1();
try {
test.fun();
test.fun1();
} catch(Exception e) { }
}
}
class OverrideTest1 extends OverrideTest{
// 以下正常Override
public void fun() throws TestException2 {
System.out.println("fun in OverrideTest1");
}
// 不能Override父類中的方法,因為它定義了不同的異常類型和
// 返回值。
//public int fun() throws TestException1 {
// System.out.println("method fun in Test");
// return 1;
//}
// 不能Override父類中的方法,因為它拋出了比父類中非法范圍
// 更大的異常。
//public void fun() throws Exception {
// System.out.println("fun in OverrideTest1");
//}
// 這個方法並沒有Override父類中的fun1方法,因為這個方法在
// 父類是private類型,所以這里只是相當於定義了一個新方法。
public void fun1() {
System.out.println("method fun1 in Test");
}
}
class TestException extends Exception{
public TestException(String msg) {
super(msg);
}
}
class TestException1 extends TestException {
public TestException1(String msg) {
super(msg);
}
}
class TestException2 extends TestException {
public TestException2(String msg) {
super(msg);
}
}
❹ 什麼是方法重載
方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。
❺ JAVA中方法重載和方法重寫的區別和應用
你好,很高興回答你的問題。
java中方法重載是指在同一個類內,方法名相同,參數列表不同。
而重寫是指子類繼承父類的方法後重新編寫方法內的邏輯。
多態其實就是通過重寫和重載實現的。
各種設計模式也都離不開重新和重載。
如果有幫助到你,請點擊採納。
❻ Java請說明什麼叫方法重載,並使用計算2個數的和來舉例說明
方法的重載:在一個類中,方法名稱一樣,參數個數不一樣或者類型不一樣。
舉例:
public class TestOverLoad {
void sum(int a , int b) {
int c=a+b;
System.out.println( "二數之和是"+ c);
}
void sum(double a, double b) {
double c=a+b;
System.out.println( "二數之和是"+ c);
}
public static void main(String[] args) {
TestOverLoad t = new TestOverLoad();
t.sum(3, 4);
double a = 3.0;
double b = 4.0;
t.sum(a, b);
}
}
輸出:二數之和是7
二數之和是7.0
❼ java方法重載是指一個類中的,方法重寫是不同類中的,對嗎
什麼是方法的重載:
java中,可以在同一個類中用相同的名稱定義兩個或者多個方法,但是參數項不同(分為參數類型不同和參數數量不同)。當兩個方法名稱相同而參數項不同時,那麼就認為此方法被重載,而此過程就被稱為"方法重載"。調用重載方法時,java使用參數的類型和數量決定實際調用重載方法的哪個版本。重載方法可以具有不同的返回類型,但返回類型本身不足以區分方法的兩個版本。因此重載方法的參數類型或者數量必須不同.
方法重載支持多態性,因為它是java實現"一個介面,多重方法"模式的一種方式。此外,構造方法也可以被重載。
什麼是方法重寫:
在類體系結構中,當子類中的方法與其父類中的方法具有相同的方法時,則認為子類中的方法重寫了父類中的方法。從子類中調用重寫方法時,將總是調用出現在子類中的方法,而父類中的方法將會被隱藏。如果程序員需要訪問重寫方法的父類中的該方法,可以使用關鍵字super來完成。
方法重寫以後父類的方法並沒有小時,只是隱藏了而已,仍然是可以調用的。
❽ 在Java中,方法重寫和方法重載有什麼區別
方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標准。
父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
子類函數的訪問修飾許可權不能少於父類的;
備註:因為最佳答案出現一個小問題,所以我參考了一下博客結合自己所學進行了回答糾錯。如有錯誤請大家積極評論糾錯,幫助更多的人。
❾ 什麼是方法重載方法重載的規則是什麼
方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個數選擇一個恰當的方法。方法重載通常用於創建完成一組任務相似但參數的類型或參數的個數或參數的順序不同的方法。
一、方法名一定要相同。
二、方法的參數表必須不同,包括參數的類型或個數,以此區分不同的方法體。
1、如果參數個數不同,就不管它的參數類型了!
2、如果參數個數相同,那麼參數的類型必須不同。
三、方法的返回類型、修飾符可以相同,也可不同。
(9)java中什麼是方法重載擴展閱讀:
Java的方法重載,就是在類中可以創建多個方法,它們可以有相同的名字,但必須具有不同的參數,即或者是參數的個數不同,或者是參數的類型不同。
調用方法時通過傳遞給它們的不同個數和類型的參數,以及傳入參數的順序來決定具體使用哪個方法。
❿ java中方法的重載是什麼意思
覆蓋是override方法重寫 重載是overload
按照教科書上的定義,重載就是具有相同函數名,返回類型可以不同,參數個數、順序、類型不同的函數。我的理解是重載是發生在兩個或者是更多的函數具有相同的名字的情況下。
重寫就是覆蓋父類的方法,和父類有相同返回類型,參數,甚至是拋出的異常,重寫方法不能為private,運用中最典型的就是對介面方法的覆蓋。方法的重寫Overriding和重載Overloading是Java多態性的不同表現.
重寫Overriding是父類和子類之間多態性的一種表現;如果在子類中定義某方法和其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding).子類的對象使用這個方法時,將調用子類中的定義,對他而言,父類中的定義如同被"屏蔽"了.
重載Overloading是個類中多態性的一種表現;如果在一個類中定義了多個同名的方法,他們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading).重載的方法是能改動返回值的類型.
現實例子:你對比上面看,比如一老爹是木工。兒子繼承老爹也是木工。
老爹有個做櫃子的獨特技術(方法),只需要用到工具錘子和木頭(參數),
兒子根據老爹這個做櫃子的技術延伸出很多種技術,他懶得再起名就也對外宣稱叫做櫃子獨特技術。
1個繼承自老爹,相同的方法名,相同的工具,但有自己的想法,工序有改動。兒子做木工活用到這個技術方法的話就叫重寫。
另外的自創,但也叫做櫃子獨特技術,但用工具不同有:
木頭。(兒子牛,不用錘子照樣做櫃子。。。)
鋸子,木頭。(也是木頭櫃子)
錘子,鐵皮。(鐵皮櫃子)
以上3中為重載。
明白?不明白給我發消息。呵呵~